我可以使用`pip`代替`easy_install`来实现`python setup.py install`依赖关系解析吗?


137

python setup.py install会自动安装requires=[]使用中列出的软件包easy_install。我该如何使用它pip呢?

Answers:


133

是的你可以。您可以从网络或计算机上的tarball或文件夹中安装软件包。例如:

从网络上的tarball安装

pip install https://pypi.python.org/packages/source/r/requests/requests-2.3.0.tar.gz

从本地tarball安装

wget https://pypi.python.org/packages/source/r/requests/requests-2.3.0.tar.gz
pip install requests-2.3.0.tar.gz

从本地文件夹安装

tar -zxvf requests-2.3.0.tar.gz
cd requests-2.3.0
pip install .

您可以删除requests-2.3.0文件夹。

从本地文件夹安装(可编辑模式)

pip install -e .

这将以可编辑模式安装软件包。您对代码所做的任何更改将立即在整个系统中应用。如果您是程序包开发人员并且想要测试更改,这将很有用。这也意味着您必须在不中断安装的情况下删除文件夹。


10
如果您习惯使用“ python setup.py install”来安装软件包,自然会问如何获取“ python setup.py install”来解决pip的依赖性,但这是错误的问题。解决方案是使用pip安装软件包,并停止使用“ setup.py install”。
joeforker 2015年

8
@joeforker的问题是,如果您执行类似的操作,可能会被迫使用easy_installpython setup.py test
TomDotTom

1
@TomDotTom关于如何在运行时强制使用pip的任何想法setup.py test,请?
Jan Sila '18

@ joeforker,pip setup.py在幕后使用。如果我希望人们能够使用pip安装我的软件包,则需要创建一个setup.py文件。
cowlinator

如果您想证明这一点,请尝试pip install -e git+https://github.com/octocat/Hello-World.git#egg=Hello-World。错误是No such file or directory: 'c:\python\src\Hello-World\setup.py
cowlinator

110

您可以先pip install归档python setup.py sdist。您也pip install -e .可以像python setup.py develop


14
任何尝试此操作的人都请注意:请注意,pip install -e它以目录作为参数,而不是setup.py文件本身。起初我没有注意到pip install -e .引起我困惑的时期:)
Markus Amalthea Magnuson 2014年

3
谢谢,pip install -e .我可以安装但要点子,如何从可编辑模式下卸载?
JuanPablo 2014年

2
使用常规的'pip卸载<程序包名称>'卸载可编辑的安装
joeforker

4

如果您真的python setup.py install愿意使用,可以尝试如下操作:

from setuptools import setup, find_packages
from setuptools.command.install import install as InstallCommand


class Install(InstallCommand):
    """ Customized setuptools install command which uses pip. """

    def run(self, *args, **kwargs):
        import pip
        pip.main(['install', '.'])
        InstallCommand.run(self, *args, **kwargs)


setup(
    name='your_project',
    version='0.0.1a',
    cmdclass={
        'install': Install,
    },
    packages=find_packages(),
    install_requires=['simplejson']
)

1
谢谢,但是我将面对使用此方法的递归回调。当我使用'python setup.py install'时,它将调用Install.run来调用pip install。,此函数将调用Install。再跑...
Lumen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.