【问题标题】:Why does Pip ignore conflicting dependencies?为什么 Pip 会忽略冲突的依赖关系?
【发布时间】:2013-01-04 21:26:10
【问题描述】:

如果我创建一个虚拟包——这里是 /tmp/example_package/setup.py(注意要求):

from distutils.core import setup

setup(name='my_project',
      description="Just a test project",
      version="1.0",
      py_modules=['sample'],
      install_requires=['requests > 0.12'])

这里是 /tmp/example_package/sample.py:

import requests

def get_example():
    return requests.get("http://www.example.com")

现在,我创建一个 virtualenv:

$ virtualenv /tmp/foobar --distribute -p python2.7
Running virtualenv with interpreter /usr/bin/python2.7
New python executable in /tmp/foobar/bin/python2.7
Also creating executable in /tmp/foobar/bin/python
Installing distribute.................................................................................................................................................................................................done.
Installing pip................done.
$ source /tmp/foobar/bin/activate

我创建了一个 requirements.pip 要求有冲突

# this requires requests > 0.12:
file:///tmp/example_package

# but this conflicts:
requests==0.9.0

Pip 很高兴地安装了这个:

$ pip install -r requirements.pip                                                                                                                                                                       [18:40:10]
Unpacking ./example_package
  Running setup.py egg_info for package from file:///tmp/example_package

Downloading/unpacking requests==0.9.0 (from -r requirements.pip (line 3))
  Downloading requests-0.9.0.tar.gz (55Kb): 55Kb downloaded
  Running setup.py egg_info for package requests

Downloading/unpacking certifi>=0.0.4 (from requests==0.9.0->-r requirements.pip (line 3))
  Downloading certifi-0.0.8.tar.gz (118Kb): 118Kb downloaded
  Running setup.py egg_info for package certifi

Installing collected packages: requests, my-project, certifi
  Running setup.py install for requests

  Running setup.py install for my-project

  Running setup.py install for certifi

Successfully installed requests my-project certifi
Cleaning up...

为什么 Pip 允许这样做?我的example_package 不起作用,因为它的要求没有得到满足。

【问题讨论】:

    标签: python python-2.7 pip python-2.x


    【解决方案1】:

    查看 pip 源,它似乎应该递归地将所有要求添加到一个大 RequirementSet...,然后以“重复要求”异常崩溃...

    嗯.. 你确定你的 setup.py 是正确的吗?

    Distutils 有一个 requires 关键字,但没有 install_requireshttp://docs.python.org/2/distutils/setupscript.html#relationships-between-distributions-and-packages

    参考这个的答案:
    https://stackoverflow.com/a/10686196/202168
    https://stackoverflow.com/a/13468644/202168

    【讨论】:

    【解决方案2】:

    这是 Pip 的限制。需求文件胜过包的需求。见https://github.com/pypa/pip/issues/775#issuecomment-12748095

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 2016-07-05
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多