pip安装依赖链接

时间:2014-09-26 14:10:19

标签: python pip setuptools

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

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

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

setup.py

但是像git repos这样的网址在... install_requires=[ "Django", .... ], ... 的{​​{1}}中不是有效的字符串。假设,我想从github安装一个库。我已经搜索了这个问题,我找到了一些我可以在install_requires setup.py中放置库的方法。但这仍然无效。这是我的依赖链接定义;

dependency_links

链接有效。我可以使用这些网址从互联网浏览器下载它们。我的设置仍然没有安装这些额外的库。我还尝试setup.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 freeze安装下载它们?

编辑:

这是我的完整dependency_links

setup.py

编辑2:

这是pip log;

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'], ) 中的来源。

4 个答案:

答案 0 :(得分:18)

Pip一段时间后删除了对dependency_links的支持。 latest version of pip that supports dependency_links is 1.3.1,安装它

pip install pip==1.3.1

您的依赖关系链接应该在那时工作。请注意,dependency_links始终是pip的最后手段,即。如果pypi上存在一个具有相同名称的包,它将被选为你的。

注意,https://github.com/pypa/pip/pull/1955似乎开始允许dependency_links,pip保留它,但你可能需要使用一些命令行开关来使用更新版本的pip。

编辑:从第7点开始......他们重新考虑了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认为它是开发版本而不会安装它。

答案 1 :(得分:8)

您需要确保在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的问题:

您在设置的依赖关系链接中缺少鸡蛋名称。

你有

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

答案 2 :(得分:3)

我遇到了类似的情况,我想把它作为我的包依赖之一。但是,Shapely有一个警告,如果您使用的是Windows,则必须使用http://www.lfd.uci.edu/~gohlke/pythonlibs/中的.whl文件。否则,你必须安装一个C编译器,这是我不想要的。我希望用户只使用pip install mypackage而不是安装一堆其他东西。

如果您使用dependency_links

进行典型设置
setup(
  name = 'streettraffic',
  packages = find_packages(), # this must be the same as the name above
  version = '0.1',
  description = 'A random test lib',
  author = 'Costa Huang',
  author_email = 'Costa.Huang@outlook.com',
  install_requires=['Shapely==1.5.17'],
  dependency_links = ['http://www.lfd.uci.edu/~gohlke/pythonlibs/ru4fxw3r/Shapely-1.5.17-cp36-cp36m-win_amd64.whl']
)

并运行python setup.py install,它只是在Pypi上选择形状并在Windows安装上造成麻烦。经过数小时的研究,我发现此链接Force setuptools to use dependency_links to install mysqlclient并基本上使用from setuptools.command.install import install as _install手动安装。

from setuptools.command.install import install as _install
from setuptools import setup, find_packages
import pip

class install(_install):
  def run(self):
    _install.do_egg_install(self)

    # just go ahead and do it
    pip.main(['install', 'http://localhost:81/Shapely-1.5.17-cp36-cp36m-win_amd64.whl'])

setup(
  name = 'mypackage',
  packages = find_packages(), # this must be the same as the name above
  version = '0.1',
  description = 'A random test lib',
  author = 'Costa Huang',
  author_email = 'test@outlook.com',
  cmdclass={'install': install}
)

脚本运行得很好。希望它有所帮助。

答案 3 :(得分:2)

启用--process-dependency-links的{​​{1}}选项为removed in Pip 19.0

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

setup.py

请注意,Pip不支持从PyPI以及以后的you will not be able to upload them to PyPI (see news entry for Pip 18.1)安装具有此类依赖项的软件包。