2015-01-15 4 views
8

python-daemon पर निर्भर पैकेज स्थापित करते समय मैंने एक समस्या में भाग लिया। आखिरकार मैंने इसे जारी किए गए पैकेज python-daemon (2.0.3) पैकेज के नवीनतम संस्करण में खोज लिया। एक Ubuntu 14.04 मशीन पर एक आभासी वातावरण में परीक्षण और जारी करने वाले निम्न कमांड:अन्य पैकेजों को तोड़ने के बिना बिल्ड-टाइम निर्भरताओं की घोषणा कैसे करें?

(venv) $ pip list 
argparse (1.2.1) 
pip (1.5.6) 
setuptools (3.6) 
wsgiref (0.1.2) 
(venv) $ pip install redis 
... works fine .... 
(venv) $ pip install python-daemon 
... 
snip 
... 
File "/home/pwj/.virtualenvs/venv/local/lib/python2.7/site-packages/pkg_resources.py", line 2147, in load 

['__name__']) 

ImportError: No module named version 

(venv)02:15 PM tmp$ pip list 
argparse (1.2.1) 
lockfile (0.10.2) 
pip (1.5.6) 
python-daemon (2.0.3) 
setuptools (3.6) 
wsgiref (0.1.2) 

तो python-daemon की स्थापित काम करने के लिए लग रहा था लेकिन कुछ pip या setuptools प्रभावित क्योंकि अन्य पैकेज (celery, flask), मैं स्थापित करने का प्रयास के साथ इस के बाद पिप मुझे एक ही ट्रैस बैक देता है:

... 
snip 
... 

File "/home/pwj/.virtualenvs/venv/local/lib/python2.7/site-packages/pkg_resources.py", line 2147, in load 

['__name__']) 

ImportError: No module named version 

अगर मैं फिर से पिप बातें और संकुल है कि अब से स्थापित नहीं कर रहे थे ठीक स्थापित के साथ अजगर-डेमॉन स्थापना रद्द करें। क्या कोई और इस पर या किसी अन्य परियोजना के समान कुछ आया है? मेरा समाधान पिछले संस्करण

(venv) $ pip install python-daemon==2.0.2 
... works ... 

स्थापित करना था, लेकिन यह सोच रहा था कि इस तरह की त्रुटि का कारण क्या हो सकता है।

+0

पायथन-डेमॉन संस्करण 2.0.4 के रूप में इस समस्या को हल किया गया है, पायथन-डेमन डेवलपर के लिए बड़ा धन्यवाद। –

उत्तर

4

(यह व्यवहार अजगर-डेमॉन संस्करण 2.0.4 और बाद में सुधार किया जाए।)

यह करने के लिए दोनों पक्षों के होते हैं:

  • setuptools यह सब कुछ का केंद्र है मान लिया गया है।
  • पायथन-डेमन का संस्करण 2.0.3 इसे ध्यान में नहीं लेता है।

एक अधिक विस्तृत विवरण: कुछ जटिल कोड अजगर-डेमॉन निर्माण प्रक्रिया, उसके बाद स्थापित की जरूरत नहीं है में शामिल Docutils का उपयोग कर रहे है और पुस्तकालय कोड का हिस्सा नहीं है।

यह में छोड़ने के लिए बहुत जटिल है, अन-आयात योग्य (और इसलिए नहीं-यूनिट-परीक्षण योग्य) setup.py ताकि निर्माण कोड एक अलग परीक्षण योग्य मॉड्यूल को घुमाया जाता है, version, जो अपने आप Docutils का उपयोग करता है (फ़ाइल version.py में)।

लेकिन फिर setup.py में एक परिपत्र निर्भरता है: version आयात करने के लिए कैसे करें, जब डॉकुटिल्स अभी तक स्थापित नहीं है? Docutils स्थापित करने के लिए Setuptools का उपयोग कैसे करें, setup.py को पूरा होने पर version की आवश्यकता होगी? सभी व्यवहार्य समाधान बदसूरत और उलझन में हैं।

'पायथन-डेमन' 2.0.3 में लिया गया दृष्टिकोण सेटअप के लिए आवश्यक डॉकुटल्स घोषित करना है और version की आवश्यकता वाले काम के लिए Setuptools entry point घोषित करना है। इस तरह setup.py किसी भी प्रविष्टि बिंदु से पहले डॉकुटिल स्थापित करने के लिए मिलता है जो version का उपयोग करेगा।

लेकिन अब हम पहले बिंदु पर आते हैं, कि Setuptools खुद को सबकुछ के केंद्र के रूप में अभिषेक करता है। एक प्रविष्टि बिंदु घोषित करके, setup.py ने प्रत्येक उसके बाद सेटअप अपलेट्स को संशोधित किया है, और यदि प्रत्येक प्रविष्टि बिंदु नहीं मिल पाता है तो प्रत्येक पैकेज विफल हो जाएगा। और, चूंकि उनमें से अधिकतर version या उस मॉड्यूल में निर्दिष्ट फ़ंक्शंस नहीं हैं, इसलिए वे Setuptools को क्रैश करते हैं।

अनिवार्य रूप से एक बग तय करने के लिए क्या है, Setuptools में एक खराब समझा जाने वाला कोने का मामला बताता है। तो मैं आपका प्रश्न उठा रहा हूं।

इस के लिए एक अच्छा समाधान प्रतीत नहीं होता है: setup.py के लिए उपलब्ध मॉड्यूल होने से पहले आवश्यकताओं को पूरा किया जाता है। Setuptools मानता है कि यह एकमात्र निर्माण प्रणाली है जो सब कुछ के लिए सभी निर्भरताओं को पूरा करने के लिए आवश्यक है, और जब यह धारणा विफल हो जाती है तो यह घूमना बहुत कठिन होता है।

Python Packaging Authority लोगों के लिए धन्यवाद, और distutils-sig forum, मुझे यह समझाते हुए।

+0

पायथन-डेमॉन स्थापित करने के लिए कोई अस्थायी/वैकल्पिक समाधान नहीं है? – Ali

+0

@Ali पायथन-डेमॉन संस्करण 2.0.4 के रूप में इस समस्या को हल किया गया है –

+0

@ बिग्नोज़ मुझे लगता है कि आप देव हैं। पीपी 6.1.1 और पायथन-डेमन == 2.0.5: venv/local/lib/python2.7/साइट-पैकेज/setuptools/dist.py: 291: उपयोगकर्ता चेतावनी: निर्दिष्ट संस्करण (u'UNKNOWN) के साथ कुछ ऐसा ही हो रहा है ') एक अमान्य संस्करण है, यह सेटअप टोल, पीआईपी और पीईपीआई के नए संस्करणों के साथ अपेक्षित काम नहीं कर सकता है। अधिक जानकारी के लिए कृपया पीईपी 440 देखें। "विवरण।" % self.metadata.version त्रुटि: 'पायथन-डेमन == 2.0.5' वितरण नहीं मिला और इसकी आवश्यकता है ... – jbrown

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