首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让setuptools安装不在PyPI上的包?

如何让setuptools安装不在PyPI上的包?
EN

Stack Overflow用户
提问于 2010-08-13 06:10:06
回答 2查看 80.6K关注 0票数 152

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-14 08:03:49

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

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

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

代码语言:javascript
复制
setup(
   ...
   dependency_links = ['http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta']
)

现在,当您的软件包正在安装时,easy_install会发现有一个"gearman 2.0.0beta“可以从该网址下载,如果您在依赖项中指定"gearman>=2.0.0beta”,easy_install会很高兴地选择它而不是PyPI上的那个。

(通常,这类操作的方法是在用户的PyPI页面上包含一个指向可下载源代码的链接;在这种情况下,如果gearman包的作者包含了一个类似上面的链接,那么您就已经设置好了。通常,人们用'myproject-dev‘标记开发版本,然后使用'myproject>=somever,==dev’的要求,这样,如果没有某个或更高版本的包,easy_install将尝试签出或下载版本。)

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

票数 162
EN

Stack Overflow用户

发布于 2014-05-26 16:06:27

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

Git

代码语言:javascript
复制
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

代码语言:javascript
复制
pip install hg+https://hg.myproject.org/MyProject/

SVN

代码语言:javascript
复制
pip install svn+svn://svn.myproject.org/svn/MyProject

Bzr

代码语言:javascript
复制
pip install bzr+http://bzr.myproject.org/MyProject/trunk

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

版本

@tag允许您指定要检出的特定版本/标记。

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

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

私有存储库

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

代码语言:javascript
复制
git+ssh://git@github.com/username/my_private_repo

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

代码语言:javascript
复制
git+https://<username>:<password>@github.com/<user>/<repo>.git

Github提供了创建可循环的personal OAuth tokens的能力

代码语言:javascript
复制
git+https://<oauth token>:x-oauth-basic@github.com/<user>/<repo>.git

requirements.txt

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

requirements.txt

代码语言:javascript
复制
package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

它们不会随软件包自动安装,必须使用命令pip -r requirements.txt进行安装。

包括需求文件

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

requirements-docs.txt

代码语言:javascript
复制
sphinx
-r requirements-dev.txt

requirements-dev.txt

代码语言:javascript
复制
some-dev-tool
-r requirements.txt

requirements.txt

代码语言:javascript
复制
package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

setup.py

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

代码语言:javascript
复制
-e .

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

参考文献:

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

票数 69
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3472430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档