Python 尽管格式正确,Pip仍忽略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

在过去寻找解决方案,例如 ,此配置应该可以工作

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', '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安装时): 我认为有两种方法可以解决这种情况:

分叉
  • github上的叉子
    koji
  • 编写自己的
    setup.py
    脚本或将其复制到某个地方(有关更多信息,请参阅下文),提交并推送
  • 在项目的
    setup.py
    中调整
    dependency\u链接中的URL
  • 为了测试,我准备了一份报告;如果我使用它的URL而不是上游repo,安装就会成功。我还用
    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'],
    )
    
    这种方法的缺点是:

  • 您根本不知道TestPyPI中的
    koji
    包是否可以安装。即使是这样,也不能保证安装的代码能按预期工作(尽管它应该)。当您拥有fork时,您总是可以自己修复安装脚本-如果wheel文件有错误,您就注定要失败
  • 定期删除TestPyPI上的包: 注意:TestPyPI的数据库可能会定期被删除,因此删除用户帐户并不罕见

  • 遗言 当然,您可以将这两种解决方法结合起来,并在
    依赖项链接中使用这两个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 python
    2.7.14
    ,pip
    9.0.1
    。有趣的是,我可以在下载的地方得到输出,但是没有找到安装脚本,只排除了
    setup
    中的
    name
    kwarg。很好的描述。那么,应该向koji图书馆报告PR/bug吗?@GrzegorzOledzki谢谢!:-)我不知道Fedora开发人员是否会将其视为一个问题,但绝对值得一试。@GrzegorzOledzki实际上,安装脚本存在于中。该死,我应该马上去看看!看起来他们的git镜像已经过时了,所以真正的问题是同步两个回购协议。然后问题出现了,你能使用
    pip
    pagure.io
    获取来源而不使用Github镜像吗?@GrzegorzOledzki当然可以,我刚刚用一个例子更新了答案。。。