【问题标题】:Pip ignores dependency_links whlie installing package from wheel if dependency exists on PyPI如果 PyPI 上存在依赖项,则 Pip 在从 wheel 安装包时忽略依赖项链接
【发布时间】:2018-01-08 08:19:50
【问题描述】:

我正在打包我自己的 Python 包。我使用 setuptools 和 wheel 来捆绑它并使用 pip 进行安装(无论是在开发模式下还是来自测试 PyPI 存储库)。

这里的每个安装包的 pip 命令都与--process-dependency-links 一起使用。为了简化,我会放弃这个选项,这个选项将在这里隐含。

其中一个依赖项在 PyPI 中被破坏,但在开发存储库中的问题已得到修复。我知道哪个提交修复了这个问题,我知道它的 SHA-1 总和,所以我知道要下载哪个 tarball。所以我在 setup.py 文件中这样做了:

...
install_requires=[
    'hbmqtt>0.9.0'
],
dependency_links=[
    'https://github.com/beerfactory/hbmqtt/archive/f4330985115e3ffb3ccbb102230dfd15bb822a72.zip#egg=hbmqtt-0.9.1'
],
...

当我在开发模式下安装包时(通过 setuptools 和 pip),包是从 git repo 下载的。然后我可以分发我的包的源代码。

python setup.py sdist
twine upload -s --sign-with gpg2 -r testpypi dist/<pkg-name>-<version>.tar.gz

然后我可以从 PyPI 安装它。如果我没有同时设置--no-cache-dir--no-binary :all: 选项(--no-cache-dir 仅用于确保未从缓存安装包),第一次安装看起来没问题。 Pip 下载源代码,然后制作轮子。解决依赖关系很顺利,一切看起来都很好。 Pip 下载(在我的示例中)HBMQTT 包的适当版本并安装它。同时 pip 制作轮子,然后缓存它。所以第二次安装(由于明显的原因没有--no-binary选项和--upgrade-I选项)由于不满足要求而失败:pip找不到版本0.9.1的HBMQTT包。 PyPI 中 HBMQTT 的最新版本是 0.9.0。所以pip在尝试从wheel包安装时不会处理依赖链接。

当我尝试制作轮子(python setup.py bdist_wheel)并将其上传到测试 PyPI 时,也会发生同样的事情。从 PyPI 以及从下载的(或由我制作的)wheel 文件安装失败。

我想问题出在点子或轮子上。我不知道哪个负责从轮子安装。

所以我的问题是我现在应该做什么?对于这种情况,确实存在哪些解决方法?我只想分叉 HBMQTT repo 并制作我自己的包,直到 PyPI 破坏包。

【问题讨论】:

  • 好吧,我发现这种行为扩展到 PyPI 中不存在包的情况。

标签: python pip setuptools distutils python-wheel


【解决方案1】:

您尝试过--process-dependency-link 标志吗?

https://github.com/pypa/pip/issues/4295

编辑:对不起,我现在看到你试过了。对我来说,这解决了问题,但这对你来说不是很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-21
    • 2021-10-05
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2014-11-03
    • 1970-01-01
    相关资源
    最近更新 更多