8

为什么 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。

两个问题:

  1. 为什么 setuptools 与它添加到 .pth 文件的目录不一致?我希望两个目录或两个目录都不会安装。

  2. 有没有办法让 setuptools 不尝试覆盖我的 PYTHONPATH?为什么这甚至被认为是一个好主意?

4

1 回答 1

0

根据我对您的问题的了解,这可能是您对此感到担忧的地方: https ://github.com/pypa/setuptools/issues/397

听起来其他人也有类似的问题。我可能是错的,我只是使用 pip。如果我能提供帮助,我从不使用 easy_install。

于 2017-03-13T19:15:02.043 回答