2013-01-21 69 views
4

如果我創建一個虛擬包 - 這裏的/tmp/example_package/setup.py(注意要求):爲什麼PIP忽略衝突的依賴關係?

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 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... 

爲什麼皮普允許這樣做?我的example_package將無法​​正常工作,因爲它的要求沒有得到滿足。

回答

2

看着它好像就應該所有要求遞歸添加到一個大RequirementSet ...,然後用「複製需求」異常碰撞出畫中畫源...

嗯..你確定你的setup.py是正確的?

Distutils的具有requires關鍵字但不install_requires:其中參考本 http://docs.python.org/2/distutils/setupscript.html#relationships-between-distributions-and-packages

SO答案:
https://stackoverflow.com/a/10686196/202168
https://stackoverflow.com/a/13468644/202168

+0

我相信我的setup.py是正確的 - 如果我不使用'install_requires',[pip在其他情況下忽略我的依賴項](http://stackoverflow.com/questions/12372336/how-do -i-make-pip-respect-requirements) –

+0

嗯,雖然https://bitbucket.org/carljm/python-distutils/src/48c42eeaee4410d76675b637bcd401b8919ff19a/core.py?at=default#cl有一些關於'install_requires'的腥意-44和http://svn.python.org/view/sandbox/trunk/setuptools/setuptools/dist.py?view=log(170行) – Anentropic

+0

我認爲你是對的,'install_requires'應該沒問題,因爲Pip使用setuptools來安裝http://stackoverflow.com/a/370062/202168 ...另外,我幾乎不會第一個注意到,但是當你在引擎蓋下看時,神聖的莫爾Python包裝是一個可怕的混亂! – Anentropic