为什么 setuptools/easy_install .pth 文件不能很好地与 PYTHONPATH 一起放置,我如何让它们很好地发挥作用,并在 sys.path 中的那些 .pth 推动之前将目录保留在我的 PYTHONPATH 中?
我目前的问题是我已经为我们的项目创建了一个包,其中 PyYAML 和 PyCrypto 作为要求。
install_requires=["PyYAML",
"pycrypto >= 2.3"]
正如我们一直在开发的那样,我们已经使用 pip 在标准目录(/usr/lib64/python2.6/site-packages)中安装了 PyYaml。我们在那里安装了旧版本的 PyCrypto,然后发现我们需要更新的版本,我们安装在 /opt/devtools/lib64/python2.6/site-packages 下。在 /usr/lib64 之前,我们已经将 PYTHONPATH 设置为首先从 /opt 读取。这一切都在开发中运行良好。运行时,我们从 /opt 获得 PyCrypto 2.3,从 /usr/lib64/... 获得 PyYaml
但是现在,当我尝试在 virtualenv 中安装时,当我运行时python setup.py develop
,setuptools/distribute 最终将 /usr/lib64/python2.6/site-packages 添加到 easy-install.pth,而不是 /opt/devtools /lib64/python2.6/site-packages。它正在寻找正确的版本,如输出所示:
Using /home/s3447/projects/wsrs.git/emp_parsing
Searching for pycrypto==2.3
Best match: pycrypto 2.3
Adding pycrypto 2.3 to easy-install.pth file
Using /opt/wsrs-devtools/stow/pycrypto-2.3/lib64/python2.6/site-packages
Searching for PyYAML==3.10
Best match: PyYAML 3.10
Adding PyYAML 3.10 to easy-install.pth file
但不要将 /opt/... 添加到 easy-install.pth。(只有 /usr/lib64... 和我运行 setup.py 的目录被添加到路径中。)
最终结果是,虽然我 setuptools 认为它成功了,但当我运行我的代码时,easy-install.pth 决定它比我更清楚我想要什么,将自己插入到我的 PYTHONPATH 之前,我最终导入了错误的版本PyCrypto。
两个问题:
为什么 setuptools 与它添加到 .pth 文件的目录不一致?我希望两个目录或两个目录都不会安装。
有没有办法让 setuptools 不尝试覆盖我的 PYTHONPATH?为什么这甚至被认为是一个好主意?