如果PyPI

时间:2017-08-01 12:47:36

标签: python pip setuptools distutils python-wheel

我正在打包自己的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。因此,当尝试从wheel包安装时,pip不会处理依赖关系链接。

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

我认为麻烦位于点或轮。我不知道哪一个负责从车轮安装。

所以我的问题是我现在应该做些什么?对于这种情况,确实存在哪些变通办法?我认为只有在分支PyPI破坏包之后才会分配HBMQTT仓库和制作我自己的包。

1 个答案:

答案 0 :(得分:0)

您是否尝试过--process-dependency-link旗帜?

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

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