2012-01-16 11 views
17

मैं अपनी परियोजनाओं के लिए निर्भरताओं की सूची बनाए रखने के लिए pip requirements file का उपयोग करता हूं।पाइप फ्रीज द्वारा बनाई गई आवश्यकताओं में पाइप इंस्टॉल विकल्पों को कैसे बनाए रखें?

मैं अब अपने आप को एक पुस्तकालय pip install --install-option='some-setup.py.option'लेकिनpip freeze का उपयोग कर जो मैं अपने प्रोजेक्ट के requirements.txt में बचाने इसके उत्पादन में इन विकल्पों रिकॉर्ड नहीं करता है स्थापित करने के लिए होने लगता है। इससे समस्याएं पैदा होती हैं क्योंकि एक नई मशीन पर एक सरल pip install -r requirements.txt इस लाइब्रेरी के लिए आवश्यक तर्कों की आपूर्ति किए बिना सभी निर्भरताओं को स्थापित करता है, और मैंने सरल राउंड-ट्रिप ऑपरेशन खो दिया है।

तो, मेरी 2 हिस्सा सवाल यह है:

  • वहाँ पिप बनाए रखने पिप फ्रीज उत्पादन किसी भी तरह में विकल्प स्थापित करने के लिए कोई तरीका है?
  • यदि नहीं, तो इंस्टॉल विकल्प जोड़ने के लिए मैन्युअल रूप से आवश्यकता फ़ाइल को हैक करने का कोई तरीका है? यदि मुझे आवश्यकता है, और आवश्यकता फ़ाइल के मैन्युअल रखरखाव पर स्विच करना है, तो pip freeze की राउंड ट्रिप प्रकृति खोने के साथ मैं ठीक हूं। मैंने documentation की जांच की है लेकिन सहायता के लिए कुछ भी नहीं देख सका।

अनावश्यक लेकिन संभवतः दिलचस्प विवरण का पालन करें

मैं स्थापित करने के लिए pymongo लेकिन without building the C extension तो मैं यह अतुल्यकालिक रूप से एक eventlet आधारित अनुप्रयोग में उपयोग कर सकते हैं चाहता हूँ।

स्थापित के रूप में वांछित और requirements.txt निर्माण: नई virtualenv में

(test)[email protected]:~/test$ pip install pymongo --install-option='--no_ext' 
Downloading/unpacking pymongo 
    Downloading pymongo-2.1.1.tar.gz (199Kb): 199Kb downloaded 
    Running setup.py egg_info for package pymongo 
Installing collected packages: pymongo 
    Running setup.py install for pymongo 
Successfully installed pymongo 
Cleaning up... 
(test)[email protected]:~/test$ pip freeze > requirements.txt 
(test)[email protected]:~/test$ cat requirements.txt 
bottle==0.10.7 
distribute==0.6.10 
eventlet==0.9.16 
greenlet==0.3.3 
lxml==2.3.3 
pymongo==2.1.1 
simplejson==2.3.2 
wsgiref==0.1.2 

, requirements.txt से एक ही परियोजना स्थापित करने का प्रयास। पिप pymongo :(

(test2)[email protected]:~/test2$ pip install -r requirements.txt 
... 
Downloading/unpacking pymongo==2.1.1 (from -r requirements.txt (line 6)) 
    Downloading pymongo-2.1.1.tar.gz (199Kb): 199Kb downloaded 
    Running setup.py egg_info for package pymongo 
Installing collected packages: pymongo 
    Running setup.py install for pymongo 
    building 'bson._cbson' extension 
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Ibson -I/usr/include/python2.6 -c bson/_cbsonmodule.c -o build/temp.linux-i686-2.6/bson/_cbsonmodule.o 
... 
Successfully installed pymongo 
Cleaning up... 

अद्यतन Issue 271 अप्रैल 2011 में पिप के खिलाफ खोला गया था प्रति-लाइन --install-option requirements.txt में निर्दिष्ट करने की क्षमता के लिए पूछने के लिए सी विस्तार बनाता है। यदि आपको एक ही समस्या है तो कृपया इस मुद्दे के लिए वोट दें।

+0

यदि आप मैन्युअल रूप से आवश्यकता फ़ाइल में --install-option = '- no_ext' जोड़ते हैं, तो यह काम करता है? - अगर मुझे संदेह नहीं है कि आपको अनुरोध करना होगा कि पीपी डेवलपर्स इस कार्यक्षमता को जोड़ते हैं (जो एक अच्छा विचार है!) – d3vid

+2

@ d3vid यह काम नहीं करता है मुझे डर है। अप्रैल 2011 में खोला गया इसके लिए पहले से ही एक फीचर अनुरोध है: https://github.com/pypa/pip/issues/271। कृपया वहां अपना +1 भी जोड़ें। – Day

उत्तर

12

लिए :) संस्करण 7.0 के बाद से सुनी है (2015-05-21 जारी), पिप आवश्यकता फाइलों से --install-option और --global-option पार्स करने के लिए की क्षमता है। अब यह अपने requirements.txt में निम्न पंक्ति को शामिल करना संभव होना चाहिए:

pymongo==2.1.1 --install-option='--no_ext' 

अधिक जानकारी here और here पाया जा सकता है।

+1

Plz https://github.com/pypa/pip/blob/master/docs/reference/pip_install.rst#id40 – y0prst

+0

पर पहला लिंक ठीक करें यह क्या है? – hlin117

+0

@ hlin117 [पहले लिंक] के अनुसार संस्करण 7.0 की तरह दिखता है (https://github.com/pypa/pip/blob/master/docs/reference/pip_install.rst#id40) – Day

5

यह शायद बहुत भद्दा हो सकता है, लेकिन यदि आप आवश्यकताओं और संबंधित विकल्पों को मैन्युअल रूप से प्रबंधित करने के साथ ठीक हैं - उन्हें एक छोटी शेल स्क्रिप्ट के रूप में क्यों न बनाए रखें जिसमें पूरे पीआईपी इंकेंटेशन शामिल है? जब तक बस एक काम के आसपास सुविधा का अनुरोध

+1

इस बीच चाल है हाँ। – Day

+0

मुझे एक ही समस्या है, और मैं खुद के साथ आने के लिए थोड़ा बेवकूफ महसूस करता हूं। इस सुझाव को पोस्ट करने के लिए धन्यवाद! – kungphu

+0

'requirements.txt' सम्मेलन को तोड़ता है, जो बेकार है क्योंकि यह सामान को डाउनस्ट्रीम को तोड़ देता है, उदाहरण के लिए http://docs.saltstack.com/en/latest/ref/states/all/salt.states.pip_state.html#salt .states.pip_state.installed। लेकिन हाँ, जाहिर है कि यहां क्या जरूरी है। – Andrew

संबंधित मुद्दे