看过去的解决方案如 pip ignores dependency_links in setup.py,此配置应该有效。
我的setup.py的相关内容
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}
我唯一能想到的是我的网址无效。我不明白为什么会这样,因为版本是1.14.0。
运行pip install .
后,我得到了。
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 develop --user
后,输出中没有提到Koji
答案 0 :(得分:3)
您的配置正确无误。但问题出在其他地方。看看koji
repo on github:项目没有setup.py
已提交。只要没有setup.py
脚本,pip
和setuptools
(通过setup.py install
/ setup.py develop
)都无法使用安装你的项目是因为他们无法安装koji
依赖项,因为它根本就没有有效的python包。
github上koji
repo的问题在于它只是位于Fedora Pagure上的实际dev repo的镜像,并且不与上游同步。所以正确的答案是使用真正的开发存储库而不是github镜像:
dependency_links=['git+https://pagure.io/koji.git#egg=koji-1.14.0']
容易腻。 : - )
koji
的repo镜像安装时):我认为有两种方法可以摆脱这种情况:
koji
setup.py
脚本或将其复制到某处(请参阅下面的详细信息),提交并推送dependency_links
中setup.py
的网址。为了测试,我准备了fork of koji
with a setup script;如果我使用其URL而不是上游存储库,则安装成功。我还标记了我自己的"发布"使用koji-1.14.0.post1
将版本与来自vanilla的安装脚本区分开来。示例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之前需要额外的开销,直到将安装脚本合并到上游。这包括测试并在每次要同步上游更新时最终在您的分支中调整koji
setup.py
。我可能会创建一个单独的分支,在那里提交设置脚本sync the fork as usual,然后在fork的主服务器上重新绑定分支,但如果你习惯了另一个更新策略,请坚持下去。
koji
个包
实际上,我在TestPyPI上找到了最新版本的一些koji
轮。这也是我获得上面的fork setup.py
的地方 - 我下载了源tar,解压缩并复制了安装脚本。这意味着koji
开发人员正在考虑通过PyPI分发项目并正在处理安装脚本,但尚未提交。当他们正在处理它时,您可以使用测试包索引作为解决方法。这样,您就不会从源代码构建软件包,而是转而构建和上传koji
开发人员:
setup(
...
dependency_links=['https://testpypi.python.org/pypi/koji'],
install_requires=['koji'],
)
此方法的缺点是:
koji
包是否可以安装。即使是这样,也无法保证已安装的代码能够按预期工作(尽管应该如此)。当您拥有分支时,您可以自己修复设置脚本 - 如果轮盘文件有错误,您将注定失败。注意:TestPyPI的数据库可能会被定期修剪,因此删除用户帐户并不罕见。
您当然可以合并这两种解决方法,并使用dependency_links
中的两个网址:
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构建。
您可能需要安装一些额外的系统包;至少对于我的系统CentOS Linux release 7.3.1611 (Core)
我必须安装curl-devel
才能满足pycurl
。