python - 让 setuptools/easy_install 与 PYTHONPATH 配合使用

标签 python setuptools pythonpath

为什么 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 版本错误。

两个问题:

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

  2. 有什么方法可以让设置工具不尝试覆盖我的 PYTHONPATH?为什么一开始就认为这是个好主意?

最佳答案

根据我对您问题的理解,这可能是您对此问题的关注点: https://github.com/pypa/setuptools/issues/397

好像其他人也遇到过类似的问题。我可能是错的,我只是使用 pip。如果可以的话,我从不使用 easy_install。

关于python - 让 setuptools/easy_install 与 PYTHONPATH 配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7590364/

相关文章:

python - 如何计算两个张量之间的余弦相似度?

python - 未找到安装工具

python - 无法在centos上安装Pillow

除非在特定目录中启动,否则 python 不会加载模块

cron - Django 管理命令 Cron on Dotcloud

python - github3.py 带有 IssueEvents 的 AttributeError

python - 如何使用 __contains__/"in"关键字在 Python List 中搜索对象?

python - 我如何使用 Twitter 的流 api 中的推文并将它们存储在 mongodb 中

setuptools - 如何在 cfg 文件中通过 cmdclass 覆盖 distutils 命令?

opencv - 如何使用PythonPath指向新安装的Opencv?