繁体   English   中英

python2.7:brew升级python3后没有这样的文件或目录

[英]python2.7: no such file or directory after brew upgrade python3

在执行brew updatebrew upgrade python3 ,我一直有这样的bad interpreter: /usr/local/opt/python/bin/python2.7: no such file or directory 例如:

⇒  mkvirtualenv --python=/usr/local/bin/python3 labrador

mkvirtualenv:78: /usr/local/bin/virtualenv: bad interpreter: /usr/local/opt/python/bin/python2.7: no such file or directory
write() failed: Bad file descriptor

这里有两种可能。


首先,从 Homebrew 1.5 开始python3配方被重命名为python ,并且python配方现在可以作为python@2 请参阅有关如何组织事物的当前文档

虽然brew试图让它像魔术一样工作,但如果你有一个非常旧的安装,或者只是一个非常复杂的设置,使用来自 Homebrew 的pythonpython3 ,并且你brew upgrade python3 ,你最终只能得到新的 (3 .x) python配方在你期望的地方。

要解决这个问题:

brew install python@2

其次,您可能已经将 virtualenv 安装到非 Homebrew Python 中,它对在哪里找到东西感到困惑。

这里最简单的解决方法是卸载该virtualenv并使用 Homebrew 3.x Python pip install它。

更一般地说,如果您有除 Homebrew 3.7、Homebrew 2.7 和 Apple 预装的 2.7 之外的其他 Python 版本,除非您有充分的理由需要它们,否则您可能想要废弃它们。 而且,如果您已经将任何其他 Python 包安装到 Apple 的 2.7 中,您可能想要卸载它们并确保永远不要接触 Apple 安装并且只使用 Homebrew 2.7。

或者,如果您确实需要安装大量 Python,您应该习惯于使用<specific-python> -m tool而不是tool来运行tool 很难让所有不同的脚本和符号链接保持同步,而且很容易最终使用一个你认为与python匹配但实际上安装到一个完全不同的pip中的pip ,以及一个使用另一个的virtualenv ,等等。

我的解决方案是:

pip uninstall virtualenv
pip install virtualenv

这是因为, virtualenvpython版本不同步,但是pythonpip仍然在一起:

$ virtualenv
-bash: /usr/local/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

$ python --version
Python 3.7.0

$ pip --version
pip 10.0.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

pythonpip都是 3.7,但virtualenv预计是 2.7。

使用pip (预期为 3.7) virtualenv和重新安装导致相同版本的virtualenv

尝试了一些不起作用的事情..在我的情况下,这是有效的:

cd /usr/local/opt/python/bin/ ln -nfs /usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/bin/python python2.7

我有一个类似的问题:

pre-commit is not in your $PATH; setting one up for you
Using virtualenv: /Users/jwilliams/.indy/venvs/pre-commit-venv_macosx-10.13-x86-64_cp2.7
$ cd /Users/jwilliams/repos/terraform-aws; /Users/jwilliams/.indy/venvs/pre-commit-venv_macosx-10.13-x86-64_cp2.7/bin/pre-commit install -f --install-hooks
dyld: Library not loaded: @executable_path/../.Python
  Referenced from: /Users/jwilliams/.indy/venvs/pre-commit-venv_macosx-10.13-x86-64_cp2.7/bin/python2.7
  Reason: image not found

$ cd /Users/jwilliams/repos/terraform-aws; /Users/jwilliams/.indy/venvs/pre-commit-venv_macosx-10.13-x86-64_cp2.7/bin/pre-commit install -f --install-hooks --hook-type pre-push
dyld: Library not loaded: @executable_path/../.Python
  Referenced from: /Users/jwilliams/.indy/venvs/pre-commit-venv_macosx-10.13-x86-64_cp2.7/bin/python2.7
  Reason: image not found

我按照上述步骤操作并得到相同的错误。 在我的情况下,修复是删除~/.indy directory ,这迫使indy重建符号链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM