【发布时间】: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