Python 如何让setuptools安装一个';它不在PyPI上吗?
我刚刚开始使用setuptools和virtualenv。我的包需要最新的python gearman,它只能从GitHub获得。PyPI上的python gearman版本是一个旧版本。Github源代码与setuptools兼容,即具有setup.py等。有没有办法让setuptools下载并安装新版本,而不是在PyPI上查找并安装旧版本Python 如何让setuptools安装一个';它不在PyPI上吗?,python,setuptools,distutils,pypi,Python,Setuptools,Distutils,Pypi,我刚刚开始使用setuptools和virtualenv。我的包需要最新的python gearman,它只能从GitHub获得。PyPI上的python gearman版本是一个旧版本。Github源代码与setuptools兼容,即具有setup.py等。有没有办法让setuptools下载并安装新版本,而不是在PyPI上查找并安装旧版本 仅供参考,新的python gearman是香草设置工具不支持直接从git存储库下载,但您可以使用该页面的下载源链接之一,如: easy_install
仅供参考,新的python gearman是香草
设置工具
不支持直接从git存储库下载,但您可以使用该页面的下载源链接之一,如:
easy_install http://github.com/mtai/python-gearman/tarball/master
关键是告诉easy_install在哪里可以下载软件包。在这种特殊情况下,可以在url中找到它。然而,这个链接本身是不起作用的,因为easy_install无法通过查看URL来判断它将得到什么 通过将其改为,easy_install将能够识别包名及其版本 最后一步是将URL添加到包的依赖项链接中,例如:
setup(
...
dependency_links = ['http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta']
)
现在,在安装软件包时,easy_install将发现有一个“gearman 2.0.0beta”可从该URL下载,如果您在依赖项中指定“gearman>=2.0.0beta”,则可以从PyPI上选择它
(通常,这类事情的处理方式是在PyPI页面上包含一个指向可下载源的链接;在这种情况下,如果gearman包的作者包含了如上所述的链接,则您已经设置好了。通常,人们用“myproject dev”标记开发版本,然后使用“myproject>=somever”的要求,==dev',因此,如果没有任何版本或更高版本的软件包,easy_install将尝试签出或下载该版本。)
使用
pip
时,您需要指定--进程依赖项链接
。请注意,依赖项链接处理已被弃用,并将在将来的版本中删除。您可以使用pip安装协议+位置[@tag][#egg=dependency]
格式直接从源代码使用pip进行安装
吉特
汞的
SVN
Bzr
支持以下协议:[+git、+svn、+hg、+bzr]
版本
@tag
用于指定要签出的特定版本/标记
#egg=name
用于指定项目作为其他项目的依赖项
订单必须始终为@tag#egg=name
私有存储库
您还可以通过将协议更改为SSH(SSH://
)并添加适当的用户(git@
)从私有存储库进行安装:
您还可以使用用户名/密码从私有存储库安装
git+https://<username>:<password>@github.com/<user>/<repo>.git
这些不是随软件包自动安装的,必须使用命令pip-r requirements.txt
安装
包括需求文件
需求文件可以包括其他需求文件:
requirements-docs.txt
sphinx
-r requirements-dev.txt
需求-dev.txt
some-dev-tool
-r requirements.txt
requirements.txt
package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git
package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git
setup.py
需求文件可以使用以下命令安装setup.py
中指定的依赖项:
-e .
setup.py
也可以使用与上述相同的语法从存储库安装,但使用中提到的依赖项链接
值
参考资料:
由于我必须做同样的事情,我找到了另一种方法来做这件事,因为
pip
的——进程依赖项链接将在pip
19.0中根据
pip
18.1包括以下功能
允许将PEP 508 URL要求用作依赖项
从PEP 508中,此类URL依赖项的语法如下所示:
基于URL的最小查找:
皮普@
因此,在setup.py中
setup(
...
install_requires = [
...
'python-gearman @ https://github.com/mtai/python-gearman/archive/master.zip'
...
]
)
请注意,该链接是一个归档文件,也可以是存储库的特定版本或分支,如前所述。此外,请参阅该答案,了解如何与其他存储库主机一起工作
据我所知,更新依赖关系的最简单方法是在从其目录安装包时使用pip install-I.
。是否有理由尝试直接从Git安装python包,而不是从那里下载源代码并在sou中使用python setup.py install
rce目录?我希望我的软件包部署在多台机器上,并自动安装其所有依赖项。您可以使用easy\u install
或pip
直接从Github安装它。但是还有另一个解决方案,您考虑过将软件包添加到PyPI吗?因为它只是为了部署,为什么不使用buildout
?它有两个现成的Git插件。这里的解决方案:因此,为了确保这个版本的python gearman安装在我的包所在的任何服务器上,我必须在安装包之前手动运行easy_install?如果您使用easy_install,是的。但是,正如其他人所指出的,您可以切换到具有更复杂需求管理的pip
或buildout
。请参阅,例如:实际上,您不必手动运行easy\u install;您只需将额外的链接添加到setup.py。我将写一个解释详细信息的答案。如我在上面的评论中所述,setup.py提供了依赖性链接,这些链接可以让您从gti Repository下载我按照您的建议做了,但当我运行“python setup.py develope”时,它显示“将依赖项链接写入foo.egg info/dependency\u links.txt”,但实际上并没有下载和安装该软件包。如果有帮助,我正在使用基于setuptools的virtualenv。您还需要有install_requires='gearman>=2.0.0beta';您包括了吗?它对我不起作用,在PyPI上的现有版本上有beta
后缀,它
package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git
sphinx
-r requirements-dev.txt
some-dev-tool
-r requirements.txt
package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git
-e .
setup(
...
install_requires = [
...
'python-gearman @ https://github.com/mtai/python-gearman/archive/master.zip'
...
]
)