【问题标题】:python2.7: no such file or directory after brew upgrade python3python2.7:brew升级python3后没有这样的文件或目录
【发布时间】:2018-07-22 19:16:47
【问题描述】:

在做了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

【问题讨论】:

  • 如果你升级你的 Python3 ,你为什么期望找到 Python2?此外,我相信他们在自制软件中重命名了python3。我想只叫pythonbrew install python 也是如此。如果你想执行,你仍然必须在你的 shell 中使用python3

标签: python python-3.x homebrew


【解决方案1】:

这里有两种可能。


首先,as of Homebrew 1.5python3 配方已重命名为 pythonpython 配方现在可用作 python@2。请参阅 the current docs 了解事物的组织方式。

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

解决这个问题:

brew install python@2

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

这里最简单的解决方法是使用 Homebrew 3.x Python 卸载 virtualenvpip install

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

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

【讨论】:

  • 不管什么原因,我需要先brew uninstall python@2 然后brew install python@2
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我也有类似的问题:

    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 重建符号链接。

    【讨论】:

      【解决方案4】:

      我的解决方案是:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-11
        相关资源
        最近更新 更多