Python 尽管格式正确,Pip仍忽略setup.py中的依赖项链接
在过去寻找解决方案,例如 ,此配置应该可以工作 my setup.py的相关内容Python 尽管格式正确,Pip仍忽略setup.py中的依赖项链接,python,pip,setup.py,Python,Pip,Setup.py,在过去寻找解决方案,例如 ,此配置应该可以工作 my setup.py的相关内容 packages=find_packages(), dependency_links=['http://github.com/koji-project/koji/tarball/master#egg=koji'], install_requires=['jira', 'PyYAML', 'requests', 'psycopg2', 'elasticsearch', 'beanb
packages=find_packages(),
dependency_links=['http://github.com/koji-project/koji/tarball/master#egg=koji'],
install_requires=['jira', 'PyYAML', 'requests', 'psycopg2',
'elasticsearch', 'beanbag', 'pyzabbix', 'enum34',
'beautifulsoup4', 'pytz', 'koji'],
tests_require=['flake8', 'autopep8', 'mock'],
include_package_data=True,
cmdclass={'test': setupTestRequirements}
我唯一能想到的就是我的url无效。我不明白为什么会这样,因为它是1.14.0版
在运行pip安装时。
I获得
Could not find a version that satisfies the requirement koji (from MARs==0.17.10) (from versions: ) No matching distribution found for koji (from MARs==0.17.10)
运行
python setup.py develope--user
,输出中没有提到Koji您的配置是正确的。然而,问题出在别处。查看:项目没有提交setup.py
。只要没有setup.py
脚本,无论是pip
还是setuptools
(通过setup.py安装
/setup.py开发
)都无法安装项目,因为它们无法安装koji
依赖项,因为它根本不是有效的python包
更新:
github上的kojirepo的问题在于它只是位于上的实际开发repo的镜像,并且没有与上游同步。因此,正确的答案是使用real development存储库而不是github镜像:
dependency_links=['git+https://pagure.io/koji.git#egg=koji-1.14.0']
简单的豌豆。:-)
原始答案(过时,仅当您想在Github上从koji
s repo mirror安装时):
我认为有两种方法可以解决这种情况:
分叉
koji
setup.py
脚本或将其复制到某个地方(有关更多信息,请参阅下文),提交并推送setup.py
中调整dependency\u链接中的URL
koji-1.14.0.post1
标记了我自己的“发行版”,以区分安装脚本版本和普通版本。具有新依赖项的示例setup.py
:
from setuptools import setup, find_packages
setup(
name='spam',
version='0.1',
author='nobody',
author_email='nobody@nowhere.com',
url='www.example.com',
packages=[],
dependency_links=['https://github.com/hoefling/koji/tarball/master#egg=koji-1.14.0.post1'],
install_requires=['koji==1.14.0.post1'],
)
使用pip
测试安装会产生:
$ pip install . --process-dependency-links
Obtaining file:///home/hoefling/python/spam
DEPRECATION: Dependency Links processing has been deprecated and will be removed in a future release.
Collecting koji==1.14.0.post1 (from spam==0.1)
Downloading https://github.com/hoefling/koji/tarball/master (1.4MB)
100% |████████████████████████████████| 1.4MB 759kB/s
Collecting pyOpenSSL (from koji==1.14.0.post1->spam==0.1)
Using cached pyOpenSSL-17.5.0-py2.py3-none-any.whl
Collecting pycurl (from koji==1.14.0.post1->spam==0.1)
Using cached pycurl-7.43.0.1.tar.gz
...
Installing collected packages: six, idna, asn1crypto, pycparser, cffi,
cryptography, pyOpenSSL, pycurl, python-dateutil, chardet, certifi,
urllib3, requests, pykerberos, requests-kerberos, rpm-py-installer,
koji, spam
Running setup.py install for rpm-py-installer ... done
Running setup.py install for koji ... done
Running setup.py install for spam ... done
Successfully installed asn1crypto-0.23.0 certifi-2017.11.5 cffi-1.11.2
chardet-3.0.4 cryptography-2.1.4 idna-2.6 koji-1.14.0.post1 pyOpenSSL-17.5.0
pycparser-2.18 pycurl-7.43.0.1 pykerberos-1.1.14 python-dateutil-2.6.1
requests-2.18.4 requests-kerberos-0.11.0 rpm-py-installer-0.5.0 six-1.11.0
spam-0.1 urllib3-1.22
安装的软件包看起来不错:
$ pip list
Package Version
----------------- ------------
asn1crypto 0.23.0
certifi 2017.11.5
cffi 1.11.2
chardet 3.0.4
cryptography 2.1.4
idna 2.6
koji 1.14.0.post1
pip 9.0.1
pycparser 2.18
pycurl 7.43.0.1
pykerberos 1.1.14
pyOpenSSL 17.5.0
python-dateutil 2.6.1
requests 2.18.4
requests-kerberos 0.11.0
rpm-py-installer 0.5.0
rpm-python 4.11.3
setuptools 38.2.4
six 1.11.0
spam 0.1
urllib3 1.22
wheel 0.30.0
这种方法的缺点是在安装脚本合并到上游之前维护fork会增加额外的开销。这包括测试并最终调整fork中的koji
的setup.py
,以便每次同步上游更新。我可能会使用提交的安装脚本创建一个单独的分支,然后在fork的master上重新设置分支的基础,但是如果您习惯于另一种更新策略,请坚持使用它
使用来自的koji
包装
实际上,我在TestPyPI上找到了一些最新版本的koji
wheels。这也是我为上面的fork获得setup.py
的地方——我下载了源tar,解包并复制了安装脚本。这意味着koji
dev正在考虑通过PyPI分发项目,并正在编写安装脚本,但尚未提交。当他们在处理它时,您可以使用测试包索引作为解决方法。这样,您就不会从源代码构建包,而是由koji
devs构建并上传:
setup(
...
dependency_links=['https://testpypi.python.org/pypi/koji'],
install_requires=['koji'],
)
这种方法的缺点是:
koji
包是否可以安装。即使是这样,也不能保证安装的代码能按预期工作(尽管它应该)。当您拥有fork时,您总是可以自己修复安装脚本-如果wheel文件有错误,您就注定要失败依赖项链接中使用这两个URL:
setup(
...
dependency_links=[
'https://testpypi.python.org/pypi/koji',
'https://github.com/hoefling/tarball/master#egg=koji-1.14.0.post1',
],
install_requires=['koji'],
)
这样,如果在TestPyPI上找不到包,它将从您的fork构建
最后注2
您可能需要安装一些额外的系统包;至少对于我的系统CentOS Linux 7.3.1611版(Core)
我必须安装curl-devel
,以满足pycurl
在pip
方面不是专家的要求,但是你试过没有koji
部分的egg=/code>吗?e、 g.git@github.com:koji project/koji.git#egg=1.14.0
不起作用,从我的链接答案来看,它似乎需要egg={repo name}-{version}
。我刚刚尝试了setup.py
(在删除cmdclass
之后)运行了python setup.py develope--user
,它有没有提到koji
(不过下载任何东西都没有成功)python版本?我的是2.7.12
<代码>pip 9.0.1
,但我想这可能不相关。@GrzegorzOledzki python2.7.14
,pip9.0.1
。有趣的是,我可以在下载的地方得到输出,但是没有找到安装脚本,只排除了setup
中的name
kwarg。很好的描述。那么,应该向koji图书馆报告PR/bug吗?@GrzegorzOledzki谢谢!:-)我不知道Fedora开发人员是否会将其视为一个问题,但绝对值得一试。@GrzegorzOledzki实际上,安装脚本存在于中。该死,我应该马上去看看!看起来他们的git镜像已经过时了,所以真正的问题是同步两个回购协议。然后问题出现了,你能使用pip
从pagure.io
获取来源而不使用Github镜像吗?@GrzegorzOledzki当然可以,我刚刚用一个例子更新了答案。。。