pip安装依赖链接

2024-05-12 22:12:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python version 2.7pip version is 1.5.6

我想从url安装额外的库,就像正在安装setup.py上的git repo一样。

我在install_requires参数中添加了额外的内容。这意味着,我的库需要额外的库,而且还必须安装它们。

...
install_requires=[
    "Django",
    ....
],
...

但是像git repos这样的url在install_requires中不是有效的字符串。假设,我想从github安装一个库。我已经搜索过这个问题,我发现了一些东西,我可以把库放在dependency_linkssetup.py中。但那还是不行。这是我的依赖链接定义

dependency_links=[
    "https://github.com/.../tarball/master/#egg=1.0.0",
    "https://github.com/.../tarball/master#egg=0.9.3",
], 

链接有效。我可以用这些网址从互联网浏览器下载它们。这些额外的库仍然没有安装在我的设置中。我还尝试了--process-dependency-links参数来强制pip。但结果是一样的。我管的时候不会出错。

安装后,在pip freeze结果中没有库。

如何使它们与我的setup.py安装一起下载?

编辑:

这是我完整的setup.py

from setuptools import setup

try:
    long_description = open('README.md').read()
except IOError:
    long_description = ''

setup(
    name='esef-sso',
    version='1.0.0.0',
    description='',
    url='https://github.com/egemsoft/esef-sso.git',
    keywords=["django", "egemsoft", "sso", "esefsso"],
    install_requires=[
        "Django",
        "webservices",
        "requests",
        "esef-auth==1.0.0.0",
        "django-simple-sso==0.9.3"
    ],
    dependency_links=[
        "https://github.com/egemsoft/esef-auth/tarball/master/#egg=1.0.0.0",
        "https://github.com/egemsoft/django-simple-sso/tarball/master#egg=0.9.3",
    ],

    packages=[
        'esef_sso_client',
        'esef_sso_client.models',
        'esef_sso_server',
        'esef_sso_server.models',
    ],
    include_package_data=True,
    zip_safe=False,
    platforms=['any'],
)

编辑2:

这是圆木

Downloading/unpacking esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
  Getting page https://pypi.python.org/simple/esef-auth/
  Could not fetch URL https://pypi.python.org/simple/esef-auth/: 404 Client Error: Not Found
  Will skip URL https://pypi.python.org/simple/esef-auth/ when looking for download links for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
  Getting page https://pypi.python.org/simple/
  URLs to search for versions for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0):
  * https://pypi.python.org/simple/esef-auth/1.0.0.0
  * https://pypi.python.org/simple/esef-auth/
  Getting page https://pypi.python.org/simple/esef-auth/1.0.0.0
  Could not fetch URL https://pypi.python.org/simple/esef-auth/1.0.0.0: 404 Client Error: Not Found
  Will skip URL https://pypi.python.org/simple/esef-auth/1.0.0.0 when looking for download links for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
  Getting page https://pypi.python.org/simple/esef-auth/
  Could not fetch URL https://pypi.python.org/simple/esef-auth/: 404 Client Error: Not Found
  Will skip URL https://pypi.python.org/simple/esef-auth/ when looking for download links for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
  Could not find any downloads that satisfy the requirement esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Cleaning up...
  Removing temporary dir /Users/ahmetdal/.virtualenvs/esef-sso-example/build...
No distributions at all found for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Exception information:
Traceback (most recent call last):
  File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/commands/install.py", line 278, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/req.py", line 1177, in prepare_files
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
  File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/index.py", line 277, in find_requirement
    raise DistributionNotFound('No distributions at all found for %s' % req)
DistributionNotFound: No distributions at all found for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)

它似乎不使用dependency_links中的源代码。


Tags: installpipfrompyhttpsorggithubpypi
3条回答

启用dependency_links--process-dependency-links选项是removed in Pip 19.0

相反,您可以使用PEP 508URL来指定依赖项,即supported since Pip 18.1。以下是从setup.py中摘录的示例:

install_requires=[
    "numpy",
    "package1 @ git+https://github.com/user1/package1",
    "package2 @ git+https://github.com/user2/package2@branch1",
],

请注意,Pip不支持从PyPI和将来的you will not be able to upload them to PyPI (see news entry for Pip 18.1)安装具有此类依赖关系的包。

您还需要确保在install_requires中包含依赖项。

这里有一个例子setup.py

#!/usr/bin/env python
from setuptools import setup

setup(
    name='foo',
    version='0.0.1',
    install_requires=[
        'balog==0.0.7'
    ],
    dependency_links=[
        'https://github.com/balanced/balog/tarball/master#egg=balog-0.0.7'
    ]
)

下面是示例setup.py的问题:

您设置的依赖项链接中缺少egg名称。

你有

https://github.com/egemsoft/esef-auth/tarball/master/#egg=1.0.0.0

你需要

https://github.com/egemsoft/esef-auth/tarball/master/#egg=esef-auth-1.0.0.0

Pip不久前删除了对依赖关系链接的支持。安装latest version of pip that supports dependency_links is 1.3.1

pip install pip==1.3.1

依赖关系链接应该在这一点上起作用。请注意,依赖关系链接始终是pip的最后手段,也就是说,如果pypi上存在同名的包,那么将选择它而不是您的包。

注意,https://github.com/pypa/pip/pull/1955似乎开始允许依赖关系链接,pip保留了它,但是您可能需要使用一些命令行开关来使用较新版本的pip。

编辑:从pip 7开始。。。他们重新考虑了dep链接,并启用了这些链接,尽管他们还没有从讨论中删除dep通知,但他们似乎仍然留在这里。使用pip>;=7,您可以安装以下内容

pip install -e . --process-dependency-links --allow-all-external

或者将以下内容添加到pip.conf中,例如/etc/pip.conf

[install]
process-dependency-links = yes
allow-all-external = yes
trusted-host =
    bitbucket.org
    github.com

编辑

我学到的一个技巧是把版本号提高到一个非常高的值,以确保pip不喜欢非依赖链接版本(如果这是你想要的)。从上面的示例中,使依赖项链接看起来像:

"https://github.com/egemsoft/django-simple-sso/tarball/master#egg=999.0.0",

还要确保版本看起来像示例或是日期版本,任何其他版本控制都会使pip认为它是dev版本,而不会安装它。

相关问题 更多 >