setup.py能否使用pip而不是easy_install?

4
我一直试图解决这个问题,甚至尝试在这里提问,但效果不佳。现在我对情况有了更清楚的了解,我相信问题的根源在于当我运行python setup.py [install|develop]时,它会尝试使用easy_install而不是pip来满足依赖项(即install_requires)。

这可能听起来不像问题,但我在自己运行的pypi服务器上存储这些依赖项。我可以使用PIP_INDEX_URL环境变量指定pip使用我的索引服务器。在部署时使用pip install很好用,但在开发时,我想使用setup.py develop来安装。据我所知,setup.py调用easy_install,它并不关心这个环境变量,试图在pypi.python.org上找到我的包。我知道从命令行中可以指定一个index server给easy_install,但在setup.py被隐式调用时,我看不出有什么办法去做这件事。
我更加困惑的是pip并没有遇到这个问题。当我pip install其中之一的模块时,它会为我的包运行setup.py,但从我的索引服务器获取依赖项。为什么当我直接调用setup.py时,它的行为与在pip下运行时不同呢?
在setup.py中指定dependency_links并不是一个好答案,因为我希望我的环境决定使用哪个pypi服务器(例如prod、test或dev)。
我的配置对我来说似乎并不奇怪,所以肯定有其他人遇到并解决了这个问题。
3个回答

3

为什么当我直接调用setup.py时,它的行为与在pip下运行时不同?

PIP_INDEX_URL环境变量是pip的一个特性。

您的setup.py文件使用setuptools,它不知道PIP_INDEX_URL

我建议您使用:

PIP_INDEX_URL=http://yourpypi/ pip install .

替代

python setup.py install

我之前不知道可以直接通过pip安装,而不需要先将软件包上传到服务器。这太好了。再加上@detly建议的-e选项,简直完美。非常感谢你们两位! - zenzic
pip并不是setuptools的包装器。我真心希望它是,但事实并非如此。它会自行完成所有安装和其他操作,这导致其行为与setuptools不同。 - wvxvw

2

您可能对pip的“可编辑安装”选项感兴趣,该选项需要使用-e标志来指定:

“可编辑”安装基本上就是“setuptools开发模式”安装。

对于本地项目,“SomeProject.egg-info”目录相对于项目路径创建。这是与仅使用setup.py develop相比的一个优势,后者会在当前工作目录下创建“egg-info”目录。


谢谢!我会试一下的。 - zenzic

0

这并没有真正回答我的问题,因为我仍然不知道如何让setup.py使用pip而不是easy_install。但是,我找到了解决办法。您可以通过在~/.pydistutils文件中指定索引服务器来强制easy_install使用您选择的索引服务器。例如:

[easy_install]
index_url = http://pypi.my_domain.org/simple

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接