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

jam*_*her 9 python macos homebrew virtualenv

当我跑步时virtualenv,我明白了:

$ virtualenv
-bash: /usr/local/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)

virtualenv今天才开始以这种方式行事.它昨天工作.它因为virtualenv使用不存在的Python解释器的Python脚本而中断:

$ head -1 $(which virtualenv)
#!/usr/local/opt/python/bin/python2.7
Run Code Online (Sandbox Code Playgroud)

在我的机器上,/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
Run Code Online (Sandbox Code Playgroud)

正如所料,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
Run Code Online (Sandbox Code Playgroud)

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

/usr/local/opt/python是由Homebrew管理的.我不知道我的出处virtualenv.我怎样才能知道/usr/local/bin/virtualenv他来自哪里?

哪个怪?我的virtualenv还是Homebrew?

jam*_*her 7

对此的责任在于pip,而不是Homebrew.我/usr/local/bin/virtualenv来自pip install virtualenv,在安装时嵌入了Python解释器的绝对链接!我已经开启了一个关于这种单一行为的问题.

  • 我重写了`/ usr/local/bin/virtualenv`中的hash-bang,指向`/ usr/local/bin/python2`中的别名python. (2认同)