Python 如何让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

我刚刚开始使用setuptools和virtualenv。我的包需要最新的python gearman,它只能从GitHub获得。PyPI上的python gearman版本是一个旧版本。Github源代码与setuptools兼容,即具有setup.py等。有没有办法让setuptools下载并安装新版本,而不是在PyPI上查找并安装旧版本


仅供参考,新的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'
   ...
   ]
)