Pip和Python在模块位置上存在分歧

Mar*_*eed 5 python macos python-2.7

好的,这很奇怪.我在Mac(Yosemite)上帮助一位同事,在/usr/bin/python(2.7.10)中运行随附的Python可执行文件.我用的是装运easy_install安装pip(9.0.1),它是/usr/local/bin用一个shebang线存放的#!/usr/bin/python.然后我用来pip安装一些模块,包括six,只是为了找出pip和python以某种方式不同意该模块的版本:

尾巴pip install -vvv -U six:

Installed version (1.10.0) is most up-to-date (past versions: 0.9.0, 0.9.1, 0.9.2, 1.0.0, 1.1.0, 1.2.0, 1.3.0, 1.4.0, 1.4.1, 1.5.0, 1.5.1, 1.5.2, 1.6.0, 1.6.1, 1.7.0, 1.7.1, 1.7.2, 1.7.3, 1.8.0, 1.9.0, 1.10.0)
Requirement already up-to-date: six in /Library/Python/2.7/site-packages
Run Code Online (Sandbox Code Playgroud)

产量python -c 'import six; print six.__version__':

1.4.1
Run Code Online (Sandbox Code Playgroud)

相关地点:

$ type pip
pip is /usr/local/bin/pip
$ type python
python is /usr/bin/python
$ head -n 1 $(type -p pip)
#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

$PYTHONPATH没有在环境中设置.但他们仍然在寻找不同的地方.正如您从pip输出中看到的那样,它正在寻找/存储/Library/Python/2.7/site-packages/.但如果我循环sys.path,我找到的第一个地方six就是/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/.

那么脱节的地方在哪里?

Mar*_*eed 1

事实证明,问题出在加载路径的顺序上。在我的Sierra 机器上(我验证了我能够安装新的six默认值/usr/bin/python),/Library/Python/2.7/site-packages在. 但在同事的计算机上,是最后一个条目,位于文件夹之后,因此安装的版本被系统安装掩盖。 /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/pythonsys.path/Library/Python/2.7/site-packagesExtraspip

我怀疑这是由 Sierra 修复的 Yosemite Python 安装的问题,但无论如何我看不出有什么简单的修复方法。因此,选项是安装一个单独的 Python 实例(我的偏好;pyenv无论如何我通常都会使用)或手动设置PYTHONPATH为放在site-packages前面。或者升级到更新的 macOS,我想。

感谢大家帮助解决这个问题。