setup.py可以使用pip而不是easy_install吗?

时间:2014-03-07 00:01:28

标签: python pip easy-install

我一直试图解决这个问题一段时间,我甚至尝试过问here,但这样做的确很糟糕。从那以后,我逐渐明白发生了什么。我相信问题的根源是当我运行python setup.py [install|develop]时,它尝试使用easy_install而不是pip来实现依赖项(install_requires)。

这听起来可能不是问题,但我运行自己的pypi服务器,存储这些依赖项。我可以指定pip使用我的索引服务器和PIP_INDEX_URL环境变量。使用pip install进行部署时,此工作正常,但在开发时,我希望使用setup.py develop进行安装的便利性。据我所知,setup.py调用easy_install并且它不关注这个环境变量,试图在pypi.python.org上找到我的包。我知道从命令行,我可以为easy_install指定索引服务器,但是当从setup.py隐式调用它时,看不到这样做。

我对pip没有遇到这个问题感到困惑。当我pip install这些模块中的一个时,它为我的包运行setup.py,但是从我的索引服务器中获取依赖项。为什么setup.py在pip下运行时的行为与我直接调用它时的行为不同?

在setup.py中指定dependency_links并不是一个好的答案,因为我希望我的环境确定要使用哪个pypi服务器(例如prod,test或dev)。

我的设置对我来说似乎并不奇怪,所以其他人遇到并解决了这个问题。

3 个答案:

答案 0 :(得分:2)

您可能对使用-e标志指定的pip "editable install" option感兴趣:

  

“可编辑”安装基本上是“setuptools develop mode”安装。

     

对于本地项目,相对于项目路径创建“SomeProject.egg-info”目录。这比仅使用setup.py develop更有优势,它直接相对于当前工作目录创建“egg-info”。

答案 1 :(得分:2)

  

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

pipsetuptools的包装,PIP_INDEX_URL变量是pip功能。您的setup.py文件使用的setuptools不知道PIP_INDEX_URL

我建议使用:

PIP_INDEX_URL=http://yourpypi/ pip install .

而不是

python setup.py install

答案 2 :(得分:0)

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

[easy_install]
index_url = http://pypi.my_domain.org/simple
相关问题