为什么 setuptools/easy_install .pth 文件不能很好地放置在 PYTHONPATH 中,我如何让它们很好地运行,并在将这些 .pth 插入 sys.path 之前将目录保留在我的 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 下。我们已经将 PYTHONPATH 设置为先从/opt 读取,然后再从/usr/lib64 读取。这一切在开发中都运行良好。运行时,我们从/opt 获得了 PyCrypto 2.3,从/usr/lib64/.... 获得了 PyYaml。
但是现在,当我尝试在 virtualenv 中安装时,当我运行 python setup.py develop
时,setuptools/distribute 最终添加了/usr/lib64/python2.6/site-包到 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 文件的目录方面不一致?我希望两个目录都安装或两个目录都不安装。
有什么方法可以让设置工具不尝试覆盖我的 PYTHONPATH?为什么一开始就认为这是个好主意?
最佳答案
根据我对您问题的理解,这可能是您对此问题的关注点: https://github.com/pypa/setuptools/issues/397
好像其他人也遇到过类似的问题。我可能是错的,我只是使用 pip。如果可以的话,我从不使用 easy_install。
关于python - 让 setuptools/easy_install 与 PYTHONPATH 配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7590364/