如何让 setuptools 安装 PyPI 上没有的包?

2025-03-05 09:14:00
admin
原创
94
摘要:问题描述:我刚刚开始使用 setuptools 和 virtualenv。我的软件包需要最新的 python-gearman,但只能从 GitHub 获得。PyPI 上的 python-gearman 版本是旧版本。Github 源与 setuptools 兼容,即有 setup.py 等。有没有办法让 se...

问题描述:

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

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


解决方案 1:

关键是告诉 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 下载,并且很高兴地选择它而不是 PyPI 上的那个,如果您在依赖项中指定“gearman>=2.0.0beta”。

(通常,这种做法是在某人的 PyPI 页面上包含一个可下载源的链接;在这种情况下,如果 gearman 包的作者已经包含了一个像上面这样的链接,那么你已经设置好了。通常,人们用“myproject-dev”标记开发版本,然后人们使用“myproject>=somever,==dev”的要求,这样如果没有 somever 或更高版本的包,easy_install 将尝试签出或下载该版本。)

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

解决方案 2:

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

Git

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

Mercurial

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

解决方案 3:

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

pip18.1 包含以下功能

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

根据PEP 508 的描述,此类 URL 依赖关系的语法如下:

基于 URL 的最小查找:

pip @ 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 .目录安装包时使用。

解决方案 4:

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

easy_install http://github.com/mtai/python-gearman/tarball/master
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3975  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2742  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   80  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   88  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   77  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用