Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 强制setuptools从存储库而不是PyPI中请求包_Python_Python 3.x_Setuptools - Fatal编程技术网

Python 强制setuptools从存储库而不是PyPI中请求包

Python 强制setuptools从存储库而不是PyPI中请求包,python,python-3.x,setuptools,Python,Python 3.x,Setuptools,所以,我有一个项目,在那里我使用yapsy和watchdog,但是这两个库在PyPI上都有坏的版本(至少对于p3来说,我称之为“坏的”只是移植错误了) 我没有从PyPI安装它们,而是克隆了它们的GIT存储库并手动安装。当我开始编写setup.py时,问题出现了 我如何告诉安装应用程序(pip,easy_install,随便什么)使用VCS repo的版本,而不是PyPI 我可以通过分叉和修复那些LIB来做到这一点,但我发现。。。错。我必须冻结库,或等待一段时间,直到有人将我的修复程序合并到lib

所以,我有一个项目,在那里我使用yapsy和watchdog,但是这两个库在PyPI上都有坏的版本(至少对于p3来说,我称之为“坏的”只是移植错误了)

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

我如何告诉安装应用程序(pip,easy_install,随便什么)使用VCS repo的版本,而不是PyPI


我可以通过分叉和修复那些LIB来做到这一点,但我发现。。。错。我必须冻结库,或等待一段时间,直到有人将我的修复程序合并到libs存储库。

然后才能使用此解决方案

我强烈建议阅读评论来提问和回答问题-此解决方案是肮脏的,只有在没有其他选择时才应使用(因为公司政策或任何其他您无法更改的内容)

解决方案

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

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

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

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

这就是诀窍——只要没有人会弄乱版本号(因此它们保持严格的数字,没有分支,等等)。此外,这强制执行了这样的假设,即VCS代码比PyPI代码更为最新。这对我很有用。

你的包裹真的不应该做出这样的决定。软件包分发版可以随时间轻松更改,不必将软件包绑定到特定位置。根据版本范围,将查找软件包的任务留给
pip
buildout
或您安装软件包时使用的任何工具。可以指示他们查看GitHub的依赖关系。那么,在这种情况下,您有什么建议?我理解为什么要创建PyPI,以及回购协议可能会被移动,等等——但在这种情况下,PyPI没有正确使用,我别无选择,只能从VCS回购协议安装。当然,如果出现修复,我会将setup.py更改为再次使用PyPI。如果仅仅因为外部依赖项更改而需要更改setup.py,则还需要更改版本号,否则无法正确重新安装软件包。不要乱动
setup.py
,除非您自己的代码发生了变化。请参见pip示例。密切相关:总之:如果您在
setup.py
中口述依赖项的安装方式,您将自己与这些依赖项联系得太紧密。每次一个依赖项切换下载位置时,您都需要升级自己的版本号。在项目文档中提供
requirements.txt
buildout.cfg
或手动说明。有关此主题的好博客文章,请参阅。
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"),
    ...
], ...