44

在从 2.7.9 切换到 python 3.4.3 之后(这很简单),我经常希望在与同事分享之前使用 python 2.7.9 测试我的一些脚本。我正在使用 OSX 优胜美地平台,所有内容都是从自制软件编译的。

情况非常难看(设置PATHes 并PYTHONPATH在每个步骤中) - 直到我发现pyenv很容易做到这一点并且很容易使用自制软件安装。到现在为止还挺好。

但是,现在我使用的是这个版本的 python,它不一定能很好地与 homebrew 兼容。此外,我发现我可以切换回系统的 python,更一般地说 pyenv 可以访问它:

$ pyenv versions
  system
  2.7.9
* 3.4.3 (set by /usr/local/var/pyenv/version)

但是我怎样才能为pythonhomebrew 编译的 s添加条目?

4

6 回答 6

54

您可以在您的主目录中安装 pyenv(如 pyenv 的安装指南中所述),然后在~/.pyenv/versionsto创建一个符号链接$(brew --cellar)/python

ln -s $(brew --cellar python)/* ~/.pyenv/versions/

Homebrew 现在的工作方式,这将同时支持 2.x 和 3.x。

于 2015-06-01T18:02:16.180 回答
6

重新链接版本的便捷功能:

pyenv-brew-relink() {
  rm -f "$HOME/.pyenv/versions/*-brew"

  for i in $(brew --cellar python)/*; do
    ln -s --force $i $HOME/.pyenv/versions/${i##/*/}-brew;
  done

  for i in $(brew --cellar python@2)/*; do
    ln -s --force $i $HOME/.pyenv/versions/${i##/*/}-brew;
  done
}
于 2019-09-17T10:39:54.300 回答
3

好吧,如果您希望 pyenv pythons 和 homebrew pythons 一起生活,您需要使 homebrew pythons 的名称与版本不同。否则它们将与 pyenv 使用的目录名称发生冲突。例如,如果你想安装 pyenv python 2.7.11 和 homebrew python 2.7.11,你可以这样做。

for i in `ls $(brew --cellar python)/`; do 
  ln -s $(brew --cellar python)/$i $HOME/.pyenv/versions/$i-brew; 
done

for i in `ls $(brew --cellar python3)/`; do 
  ln -s $(brew --cellar python)/$i $HOME/.pyenv/versions/$i-brew; 
done

本质上,这将在 $HOME/.pyenv/versions 中创建一个附加“-brew”的目录,这样它就不会与 pyenv python 冲突。

于 2016-06-18T13:49:03.177 回答
3

只是为了添加到@johnizzo1的答案, python2 is now python@2,所以你应该将 python3 for 循环更改为:

for i in `ls $(brew --cellar python)/`; do 
  ln -s $(brew --cellar python)/$i $HOME/.pyenv/versions/$i-brew; 
done

for i in `ls $(brew --cellar python@2)/`; do 
  ln -s $(brew --cellar python@2)/$i $HOME/.pyenv/versions/$i-brew; 
done
于 2019-06-15T22:38:44.617 回答
2

system未指定版本时,pyenv 将用作默认版本。

当您通过 homebrew 安装 python@3 并且 pyenv 的版本被指定为 时systempython指向python 2.x系统中的,并python3指向python@3由 homebrew 安装的。

所以通常我们不需要手动将版本添加到pyenv。


在 2020 年,在 `ln -s /outside/python/xxx ~/.pyenv/versions/xxx` 之后,您需要 `pyenv rehash` 来重新散列 shim。

示例:将 macOS 系统 python 2.7 添加到 pyenv

ln -s /System/Library/Frameworks/Python.framework/Versions/2.7 ~/.pyenv/versions/2.7

pyenv rehash
于 2021-01-03T06:11:44.670 回答
2

将先前答案的所有位组合在一起,以获得一个实际工作的环来绑定它们:

pyenv-brew-relink() {
    rm -f "$HOME/.pyenv/versions/*-brew"
    for i in $(brew --cellar)/python* ; do
        ln -s -f "$p" "$HOME/.pyenv/versions/${i##/*/}-brew"
    done
    pyenv rehash
}
于 2021-03-23T15:27:42.527 回答