macOS 上的 virtualenv 使用不存在的 python 解释器



当我运行virtualenv时,我得到这个:

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

virtualenv今天才开始这样做。它昨天奏效了。它中断virtualenv因为 Python 脚本使用不存在的 Python 解释器:

$ head -1 $(which virtualenv)
#!/usr/local/opt/python/bin/python2.7

在我的机器上,/usr/local/opt/python是指向Python 3.6目录的符号链接:

$ ls -l /usr/local/opt/python
lrwxr-xr-x  1 jim  admin  24  2 Mar 13:45 /usr/local/opt/python -> ../Cellar/python/3.6.4_3

正如预期的那样,Python 3.6 目录不包含bin/python2.7

$ ls /usr/local/Cellar/python/3.6.4_3/bin/
2to3            idle            pip3            pydoc3.6        python3-config      python3.6m-config   wheel3
2to3-3.6        idle3           pip3.6          python          python3.6       pyvenv
easy_install        idle3.6         pydoc           python-config       python3.6-config    pyvenv-3.6
easy_install-3.6    pip         pydoc3          python3         python3.6m      wheel

virtualenv显然希望/usr/local/opt/python包含 Python 2 材料,但它只包含 Python 3 材料。

我的/usr/local/opt/python由Homebrew管理。我不知道我的virtualenv的来源.我如何知道我的/usr/local/bin/virtualenv来自哪里?

这应该归咎于哪个?我的virtualenv还是自制软件?

这归咎于pip,而不是自制软件。我的/usr/local/bin/virtualenv来自pip install virtualenv,它在安装时嵌入了与 Python 解释器的绝对链接!我已经打开了一个关于这种不合时宜的行为的问题。

我的 Mac 上也有同样的问题。也许当我更新到莫哈韦时它坏了?谁知道呢。

通过brew安装的 Python 2 解决:

brew install python2

现在,它接管了我出厂安装的Python 2.7,并为我提供了一个有效的新virtualenv

$ which virtualenv
/usr/local/bin/virtualenv

首先,很抱歉在这里添加单独的评论 - 我缺乏在@jameshfisher的答案中添加评论的声誉。

我使用自制软件将macos上的python2更新到最新版本:

~ ❯❯❯ python2 --version
Python 2.7.15

它创建/更新python2符号链接/usr/local/bin以链接到该特定brew安装的更新:

~ ❯❯❯ ls -ahl =python2
lrwxr-xr-x  1 michael  admin    39B  3 Jul 17:11 /usr/local/bin/python2 -> ../Cellar/python@2/2.7.15_1/bin/python2

/usr/local/bin/virtualenv中的舍邦是:

~ ❯❯❯ head -1 $(which virtualenv)
#!/usr/local/opt/python/bin/python2.7

不存在的:

~ ❯❯❯ ls -l /usr/local/opt/python/bin/python2.7
ls: /usr/local/opt/python/bin/python2.7: No such file or directory

因此,将 shebang 修改为#!/usr/local/bin/python2以使用brew安装的更新的python2版本是最合适的方法:

~ ❯❯❯ virtualenv --version
15.1.0

✨🐟✨

对我来说有点红鲱鱼是我错误地认为输入which python会给我我的 python2 版本的路径:

~ ❯❯❯ which python
/Users/michael/.pyenv/shims/python
~ ❯❯❯ which python2
/usr/local/bin/python2
~ ❯❯❯ which python3
/Users/michael/.pyenv/shims/python3
~ ❯❯❯ /Users/michael/.pyenv/shims/python --version
Python 3.7.0

忘记了我已将pyenv global设置为python 3.7.0。请不要像我一样落入那个陷阱!✨😄✨

最新更新