2017-08-01 116 views
3

我打包自己的Python软件包。我使用setuptools和wheel来捆绑它并安装pip(在开发模式和从测试PyPI存储库中)。如果PyPI上存在依赖关系,Pip将忽略dependency_links从轮安装软件包

安装软件包每个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),包从混帐回购协议下载。然后我可以分发我的包的源代码。

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包并安装它。与此同时,点子使轮子缓存起来。所以,第二次安装(无--no-binary选项明显的理由,并与--upgrade-I选项)失败,因为不满足要求:PIP不能与0.9.1版本找到HBMQTT包。 PyPI中最新版本的HBMQTT是0.9.0。所以当试图从wheel包安装时,pip不会处理依赖关系链接。当我试图使车轮(蟒蛇setup.py bdist_wheel),并把它上传在测试的PyPI

同样的事情发生。从PyPI安装失败以及从下载(或由我制作)wheel文件。

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

所以我的问题是我现在应该做的?哪种解决方法确实存在这种情况?我认为这只是关于分发HBMQTT回购和制作我自己的软件包,直到PyPI破解软件包。

+0

嗯,我发现这种行为延伸到PyPI中缺少包的情况。 – krautcat

回答

0

做你试试--process-dependency-link标志?

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

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