gpt4 book ai didi

python - 强制 setuptools 需要来自存储库而不是 PyPI 的包

转载 作者:太空宇宙 更新时间:2023-11-04 06:07:47 26 4
gpt4 key购买 nike

所以,我有这个项目,我在其中使用 yapsy 和 watchdog,但是这两个库在 PyPI 上都有损坏的版本(至少对于 p3,我所说的“损坏”只是以错误的方式移植)。

我没有从 PyPI 安装它们,而是克隆了它们的 GIT 存储库并手动安装了它们。当我开始编写 setup.py 时出现了问题。

如何告诉安装应用程序(pip、easy_install 等)使用来自 VCS 存储库的版本,而不是 PyPI?

我可以通过 fork 和修复这些库来做到这一点,但我发现它……错了。我将不得不卡住库,或者等待一段时间,直到有人将我的修复合并到 libs 存储库。

最佳答案

在您使用此解决方案之前

我强烈建议阅读问题和答案的评论 - 这个解决方案很脏,应该只在别无选择时使用(因为公司政策,或其他任何你不能改变的)。

解决方案

我发现的第一件事是我需要使用依赖链接。当 repo 版本高于 PyPI 时,它很有用。问题是,当版本相同时,安装应用程序更喜欢 PyPI 而不是 VCS。

所以,多亏了这个:Setuptools unable to use link from dependency_links我发现我需要告诉安装应用程序 VCS 拥有比 PyPI 更高的版本,即使它们是相同的,并且需要版本小于或等于这个更高的版本(我声明在 VCS 上)。

所以,是的,很酷。我可以写:

...
install_requires=[ ..., "watchdog<0.6.1", ...],
...
dependency_links = [
...
"git+https://github.com/gorakhargosh/watchdog.git#egg=watchdog",
...
], ...

但是如果明天有新版本发布,那么我会留下最新的错误修复等。

所以我想通了,我现在需要找出最高版本,然后用“最后位置高一点”的版本来解决问题。这是我用于此的代码。我把它放在“setup_helpers.py”中:http://pastebin.com/1crW5VCL

现在,在 setup.py 中我做了类似的事情:

from setup_helpers import vcs_requirement, egg_name
...
install_requires=[ ..., vcs_requirement("watchdog"), ...],
...
dependency_links = [
...
"git+https://github.com/gorakhargosh/watchdog.git#egg=%s" % egg_name("watchdog"),
...
], ...

这就是诀窍 - 只要没有人会弄乱版本号(所以它们严格保持数字,没有分支等等)。此外,这强制假设 VCS 代码比 PyPI 代码更新。它对我有用。

关于python - 强制 setuptools 需要来自存储库而不是 PyPI 的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20972093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com