कई पायथन पैकेजों में गैर-पायथन पैकेज पर निर्भरताएं हैं। मैं विशेष रूप से एलएक्सएमएल और सीएफआई के बारे में सोच रहा हूं, लेकिन यह दुविधा पीपीपीआई पर कई पैकेजों पर लागू होती है। इन दोनों पैकेजों में non-Python संकुल जैसे libxml2-dev, libxslt-dev, zlib1g-dev, और libffi-dev पर अनजान बिल्ड निर्भरताएं हैं। एलएक्सएमएल और सीएफआई के लिए वेबसाइटें इन निर्भरताओं में से कुछ घोषित करती हैं, लेकिन ऐसा लगता है कि कमांड लाइन से इसे समझने का कोई तरीका नहीं है।गैर-पायथन निर्भरताओं वाले पैकेज को 'पाइप इंस्टॉल' कैसे करें?
pip install foo
fails with an error: "fatal error: bar.h: No such file or directory". How do I fix it?
इस pip
के दुरुपयोग है या यह कैसे काम करने का इरादा है इस है:
नतीजतन, वहाँ इतना है कि यह सामान्य रूप ले पर सवाल के सैकड़ों रहे हैं? क्या pip
चलाने से पहले स्थापित करने के लिए निर्माण निर्भरताओं को जानने का कोई सौहार्दपूर्ण तरीका है? मेरा वर्तमान दृष्टिकोण है:
- मैं
foo
नामक एक पैकेज स्थापित करना चाहता हूं। pip install foo
foo
एक अजगर पैकेजbar
पर एक निर्भरता है।- यदि
bar
बिल्ड विफल रहता है, तो त्रुटि संदेश देखें और अनुमान लगाएं/Google जो गैर-पायथन निर्भरता स्थापित करने की आवश्यकता है। sudo apt-get install libbaz-dev
sudo pip install bar
bar
जब तक दोहराएँ सफल होता है।
- यदि
sudo pip uninstall foo
- कोई त्रुटि संदेश जब तक दोहराएँ पूरी प्रक्रिया।
चरण # 4 विशेष रूप से परेशान है। स्पष्ट रूप से pip
(संस्करण 1.5.4) किसी भी निर्भरता से पहले अनुरोधित पैकेज को पहले, इंस्टॉल करता है। इसलिए यदि कोई निर्भरता विफल हो जाती है, तो आप इसे फिर से स्थापित करने के लिए pip
से नहीं पूछ सकते हैं, क्योंकि ऐसा लगता है कि यह पहले से स्थापित है। केवल निर्भरताओं को स्थापित करने के लिए कोई विकल्प नहीं है, इसलिए आपको पैकेज को अनइंस्टॉल करना होगा और फिर उसे पुनर्स्थापित करना होगा।
pip
का उपयोग करने के लिए कुछ और बुद्धिमान प्रक्रिया है?
जो कुछ के लिए यह लायक है, यही कारण है कि वहाँ वैज्ञानिक दुनिया के लिए इतने सारे अजगर पैकेज प्रबंधक हैं। विंडोज या OSX पर (जैसे "अजगर वितरण" 'conda' और' enpkg' की तरह पैकेज प्रबंधकों, इस तरह के 'bento', और कम प्रसिद्ध लोगों कि मैं भूल रहा का एक समूह के रूप में प्रतिस्थापन setuptools), एक पैकेज मेंटेनर एक वितरित कर सकते हैं सभी आवश्यक पुस्तकालयों के साथ बाइनरी व्हील, लेकिन लिनक्स/बीएसडी सिस्टम पर, यह गारंटी देना कठिन होता है कि सिस्टम पायथन किस कंपाइलर के साथ बनाया गया था। किसी भी दर पर, जहां तक मुझे पता है, distutils मेटाडेटा में बाहरी निर्भरताओं को निर्दिष्ट करने का कोई तरीका नहीं है। –
मुझे लगता है कि समस्या का हिस्सा ऑपरेटिंग सिस्टम और गतिशील लिंकर्स के काम में भी निहित है। आदर्श रूप में, आप स्मृति के साथ अधिक कुशल होने के लिए ओएस में साझा पुस्तकालयों का लाभ लेना चाहते हैं। हालांकि, आप केवल सिस्टम पैकेज मैनेजर के साथ साझा लाइब्रेरी इंस्टॉल कर सकते हैं क्योंकि एक ही रिलीज चक्र में हर दूसरे पैकेज एक निश्चित, सहमत संस्करण पर निर्भर करता है। इस वजह से, पीआईपी और एपीटी के बीच वास्तव में एक विश्वसनीय इंटरफ़ेस नहीं हो सकता क्योंकि पाइप में रिलीज चक्र की कोई अवधारणा नहीं है। डिफ़ॉल्ट रूप से साझा पुस्तकालयों के साथ * नहीं * जहाज हेडर फाइल को –
डेबियन की पसंद कारणों मैं कुछ भी डेबियन से संबंधित दूर से एक है। डेबियन पर "जल्दी से कुछ संकलित" जैसी कोई चीज़ नहीं है, क्योंकि आप हमेशा '-dev' पैकेजों का शिकार कर रहे हैं; यह समस्या 'पीआईपी 'तक सीमित नहीं है। – Carpetsmoker