154

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

仅供参考,新的 python-gearman 是http://github.com/mtai/python-gearman

4

4 回答 4

163

关键是告诉easy_install 包可以下载到哪里。在这种特殊情况下,可以在 URL http://github.com/mtai/python-gearman/tarball/master中找到它。但是,该链接本身不起作用,因为 easy_install 不能仅通过查看 URL 来判断它将获得什么。

通过将其更改为http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta,easy_install将能够识别包名称及其版本。

最后一步是将 URL 添加到包的 dependency_links 中,例如:

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'的要求,这样如果没有somever或更高版本的包,easy_install会尝试查看或下载版本。)

--process-dependency-links使用时需要指定pip。请注意,依赖链接处理已被弃用,并将在未来的版本中删除。

于 2010-08-14T00:03:48.500 回答
70

您可以使用该pip install protocol+location[@tag][#egg=Dependency]格式通过 pip 直接从源安装。

吉特

pip install git+https://github.com/username/repo.git
pip install git+https://github.com/username/repo.git@MyTag
pip install git+https://github.com/username/repo.git@MyTag#egg=ProjectName

水银

pip install hg+https://hg.myproject.org/MyProject/

SVN

pip install svn+svn://svn.myproject.org/svn/MyProject

锆石

pip install bzr+http://bzr.myproject.org/MyProject/trunk

支持以下协议:[+git, +svn, +hg, +bzr]

版本

@tag让您指定要签出的特定版本/标签。

#egg=name允许您指定项目是什么作为其他人的依赖项。

顺序必须始终为@tag#egg=name

私有存储库

您还可以通过将协议更改为 SSH ( ssh://) 并添加适当的用户 ( git@) 从私有存储库进行安装:

git+ssh://git@github.com/username/my_private_repo

您还可以使用用户名/密码从私有存储库安装。

git+https://<username>:<password>@github.com/<user>/<repo>.git

Github 提供了创建可以循环使用的个人 OAuth 令牌的能力

git+https://<oauth token>:x-oauth-basic@github.com/<user>/<repo>.git

要求.txt

requirements.txt用于指定项目依赖项:

要求.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

这些不会随包自动安装,必须使用命令安装pip -r requirements.txt

包括需求文件

需求文件可以包括其他需求文件:

要求-docs.txt

sphinx
-r requirements-dev.txt

需求-dev.txt

some-dev-tool
-r requirements.txt

要求.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

安装程序.py

setup.py需求文件可以安装使用以下命令指定的依赖项:

-e .

setup.py也可以使用与上述相同的语法从存储库安装,但使用此答案dependency_links中提到的值。

参考:

https://pip.pypa.io/en/latest/user_guide.html#installing-packages https://pip.pypa.io/en/latest/reference/pip_install.html

于 2014-05-26T08:06:26.517 回答
24

因为我只需要做同样的事情,所以我找到了另一种方法来做到这一点,因为根据这个评论pip--process-dependency-links计划在 19.0 中删除。pip

pip18.1 包括以下功能

允许将 PEP 508 URL 要求用作依赖项。

根据PEP 508的描述,此类 URL 依赖项的语法如下所示:

基于 URL 的最小查找:

点子@ https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686

所以在你的setup.py它看起来像

setup(
   ...
   install_requires = [
   ...
   'python-gearman @ https://github.com/mtai/python-gearman/archive/master.zip'
   ...
   ]
)

请注意,该链接是一个存档文件,也可能是此答案中所述的存储库的特定版本或分支。另外,请参阅与其他存储库主机一起使用的答案。

据我所知,更新依赖项的最简单方法是pip install -I .在从其目录安装包时使用。

于 2018-11-21T13:02:34.370 回答
6

Vanillasetuptools不支持直接从 git 存储库下载,但您可以使用该页面的下载源链接之一,例如:

easy_install http://github.com/mtai/python-gearman/tarball/master
于 2010-08-12T22:23:11.960 回答