【问题标题】:Getting setuptools/easy_install to play nicely with PYTHONPATH让 setuptools/easy_install 与 PYTHONPATH 配合得很好
【发布时间】:2011-11-27 06:27:44
【问题描述】:

为什么 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?为什么这甚至被认为是一个好主意?

【问题讨论】:

  • 我认为这在生产中都不会成为问题,那里既没有 PYTHONPATH 也没有 virtualenvs,但它仍然很烦人。
  • 我不清楚我们是使用 setuptools 还是分发。我们正在运行 RHEL6,虽然 rpm 是 python-setuptools,但我很确定它实际上是分发的。
  • 安装 virtualenv 时是否使用了 --no-site-packages 选项,是否在运行 python setup.py develop 之前激活了 virtualenv?
  • 第一部分不同意,第二部分同意。我先试试。
  • 我知道这没有帮助,但是 pip 比 easy_install 好得多

标签: python setuptools pythonpath


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2019-05-18
    • 1970-01-01
    • 2011-10-24
    • 2016-08-18
    • 1970-01-01
    相关资源
    最近更新 更多