From 12a70ad278606aaa63136322199027d547b38382 Mon Sep 17 00:00:00 2001 From: Landon Crabtree Date: Sat, 21 Dec 2024 08:38:49 -0600 Subject: [PATCH] Added proper pyenv support to brew pyenv-sync by symlinking major version executables to their minor --- Library/Homebrew/cmd/pyenv-sync.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Library/Homebrew/cmd/pyenv-sync.rb b/Library/Homebrew/cmd/pyenv-sync.rb index 2ae2b8ca09ba3..4b1a84bdd2b6d 100644 --- a/Library/Homebrew/cmd/pyenv-sync.rb +++ b/Library/Homebrew/cmd/pyenv-sync.rb @@ -55,12 +55,31 @@ def link_pyenv_versions(path, pyenv_versions) patch_version = version.patch.to_i (0..patch_version).each do |patch| + # Create folder symlinks for all patch versions to the latest patch version + # (eg. 3.11.0 -> 3.11.3). link_path = pyenv_versions/"#{major_version}.#{minor_version}.#{patch}" + # Don't clobber existing user installations. next if link_path.exist? && !link_path.symlink? FileUtils.rm_f link_path FileUtils.ln_sf path, link_path + + # Create an unversioned symlinks + # This is what pyenv expects to find in ~/.pyenv/versions/___/bin'. + # Without this, `python3`, `pip3` do not exist and pyenv falls back to system Python. + # (eg. python3 -> python3.11, pip3 -> pip3.11) + + executables = %w[python3 pip3 wheel3 idle3 pydoc3] + executables.each do |executable| + major_link_path = link_path/"bin/#{executable}" + + # Don't clobber existing user installations. + next if major_link_path.exist? && !major_link_path.symlink? + + FileUtils.rm_f major_link_path + FileUtils.ln_s link_path/"bin/#{executable}.#{minor_version}", major_link_path + end end end end