apt-get install बनाम पाइप इंस्टॉल


103

मैं उन मामलों को लेकर थोड़ा उलझन में हूं जिनमें अजगर पैकेज डाउनलोड करते समय उपरोक्त आदेशों का उपयोग किया जाना चाहिए। मैं इस प्रश्न के उत्तर के अनुसार pyudev नामक पैकेज डाउनलोड करने का प्रयास कर रहा था । मैंने इस कमांड को अंजाम दिया:

sudo pip install python-pyudev

लेकिन निम्न संदेश प्राप्त हुआ:

Downloading/unpacking python-pyudev

  Could not find any downloads that satisfy the requirement python-pyudev
Cleaning up...
No distributions at all found for python-pyudev
Storing complete log in /home/vineet/.pip/pip.log

हालांकि निम्नलिखित काम ठीक है:

sudo apt-get install python-pyudev

apt-getपैकेजों को स्थापित करने के लिए कब उपयोग किया जाना चाहिए और कब python-pipउपयोग किया जाता है?


2
pipका उपयोग केवल अजगर पैकेज स्थापित करने के लिए किया जाता है, लेकिन apt-getसभी किसी भी पैकेज को स्थापित करने के लिए उपयोग किया जाता है।
अविनाश राज

3
ठीक है .. क्यों अजगर को स्थापित करने में सक्षम नहीं था?
विनीत कौशिक

जवाबों:


100

PyPI पायथन पैकेज इंडेक्स है - अजगर मॉड्यूल का भंडार।

pipका उपयोग PyPI से सीधे पैकेज डाउनलोड और इंस्टॉल करने के लिए किया जाता है। PyPI को Python Software Foundation द्वारा होस्ट किया जाता है । यह एक विशेष पैकेज प्रबंधक है जो केवल अजगर पैकेजों से संबंधित है।

apt-get उबंटू रिपॉजिटरी से पैकेज डाउनलोड करने और स्थापित करने के लिए उपयोग किया जाता है, जो कैननिकल द्वारा होस्ट किए जाते हैं।

से अजगर पैकेज स्थापित करने के बीच मतभेद के कुछ apt-getऔर pipइस प्रकार हैं:

  • Canonical केवल चयनित अजगर मॉड्यूल के लिए पैकेज प्रदान करता है। जबकि, PyPI अजगर मॉड्यूल की एक व्यापक श्रेणी की मेजबानी करता है। तो, बहुत सारे अजगर मॉड्यूल हैं जो आप का उपयोग करके स्थापित करने में सक्षम नहीं होंगे apt-get

  • कैनोनिकल केवल किसी भी पैकेज का एक ही संस्करण होस्ट करता है (आमतौर पर नवीनतम या हाल के दिनों में जारी किया गया)। इसलिए, apt-getहम अजगर-पैकेज का संस्करण तय नहीं कर सकते हैं जो हम चाहते हैं। pipइस स्थिति में हमारी मदद करता है। हम उस पैकेज के किसी भी संस्करण को स्थापित कर सकते हैं जो पहले PyPI पर अपलोड किया गया है। यह निर्भरता में संघर्ष के मामले में बेहद मददगार है।

  • apt-getसिस्टम-वाइड स्थान में अजगर मॉड्यूल स्थापित करता है। हम अपने प्रोजेक्ट virtualenv में सिर्फ मॉड्यूल स्थापित नहीं कर सकते । pipहमारे लिए इस समस्या को हल करता है। यदि हम pipvirtualenv को सक्रिय करने के बाद उपयोग कर रहे हैं , तो यह केवल हमारे प्रोजेक्ट virtualenv में मॉड्यूल स्थापित करने के लिए पर्याप्त बुद्धिमान है। जैसा कि पिछले बिंदु में उल्लेख किया गया है, अगर सिस्टम-वाइड लोकेशन में पहले से स्थापित किसी विशेष अजगर पैकेज का एक संस्करण है, और हमारी परियोजना में एक ही अजगर पैकेज के पुराने संस्करण की आवश्यकता है, तो ऐसी स्थितियों में हम इंस्टॉल करने के लिए virtualenv और पाइप का उपयोग कर सकते हैं बिना किसी संघर्ष के अजगर पैकेज के पुराने संस्करण।

  • जैसा कि @Radu Reandeanu ने इस उत्तर में बताया , आमतौर पर पैकेजों के नामों में भी अंतर होता है। Canonical आमतौर पर Python 2 संकुल के रूप में python-<package_name>और Python 3 संकुल को नाम देता है python3-<package_name>। जबकि pipआमतौर पर हमें केवल <package_name>पायथन 2 और साथ ही पायथन 3 पैकेज के लिए उपयोग करने की आवश्यकता होती है।

आपको किसका उपयोग करना चाहिए:

दोनों apt-getऔर pipपरिपक्व पैकेज प्रबंधकों स्थापित करते हुए जो स्वचालित रूप से किसी भी अन्य पैकेज निर्भरता स्थापित कर रहे हैं। आप जैसे चाहें वैसे किसी का भी इस्तेमाल कर सकते हैं। हालाँकि, यदि आपको अजगर-पैकेज के एक विशेष संस्करण को स्थापित करने की आवश्यकता है, या एक virtualenv में पैकेज स्थापित करना है, या एक पैकेज स्थापित करना है जो केवल PyPI पर होस्ट किया गया है; केवल pipउस समस्या को हल करने में आपकी सहायता करेगा। अन्यथा, यदि आपको सिस्टम-वाइड लोकेशन में पैकेजों को स्थापित करने में कोई आपत्ति नहीं है तो यह वास्तव में मायने नहीं रखता कि आप उपयोग करते हैं apt-getया नहीं pip


5
इसके अलावा, आपको एक या दूसरे का उपयोग करने का प्रयास करना चाहिए , और न कि दोनों pipऔर समान रूप से apt-get
earthmeLon

3
जल्दी या बाद में, किसी को पैकेज या इसके संस्करण की आवश्यकता हो सकती है जो इसके द्वारा प्रदान नहीं की जाती है apt-get। क्योंकि दोनों का उपयोग करना apt-getऔर pipसंघर्ष का कारण हो सकता है, क्या सलाह हमेशा pipसमर्थित पैकेजों के लिए उपयोग करना चाहिए pip?
अभिषेक आनंद

2
@ अभिषेक, मेरी पसंदीदा विधि हमेशा एक virtualenv के माध्यम से अजगर का उपयोग करने के लिए है .. तो, हाँ, मैं उपयुक्त से अधिक पाइप का उपयोग करना पसंद करते हैं ..
आदित्य

यह कुछ निश्चित परिदृश्यों में कीड़े की अपनी इच्छा को खोलता है। मान लें कि आपने अपने अधिकांश पैकेजों को sudo pipबिना इंस्टॉल किए रखा है virtualenvक्योंकि आपकी अधिकांश परियोजनाओं के लिए समान वातावरण की आवश्यकता होती है (लेकिन स्वच्छ उबंटू इंस्टॉलेशन के साथ प्रदान की गई तुलना में अधिक व्यापक)। फिर जब आप एक प्रणाली अद्यतन करना और Ubuntu एक नया संस्करण (के साथ की तरह करने के लिए अजगर का उन्नयन करने का निर्णय लेता zestyकरने के लिए artful- अजगर 3.5 3.6), में अपनी पिप-इंस्टॉल किए गए पैकेज के सभी /usrपीछे छूट जाते हैं और pip.get_installed_distributions()एक खाली सूची पैदा करता है।
z33k

वैश्विक संदर्भ में पाइप का उपयोग करना गलत है और इसका उपयोग नहीं किया जाना चाहिए, क्योंकि यह सिस्टम अजगर स्थापना को गड़बड़ कर देगा। पाइप और उपयुक्त-पूरी तरह से अलग चीजें मिलती हैं, और उनकी तुलना करना गलत है। एक अजगर मॉड्यूल स्थापित करने का प्रयास करें जो अन्य गैर-अजगर पुस्तकालयों पर निर्भर करता है और आपको जल्दी से एहसास होगा कि आपको उपयुक्त-आवश्यकता क्यों हो सकती है।
मस्तिया

21

जैसा कि @AashashRaj ने अपनी टिप्पणी में कहा , pipका उपयोग केवल अजगर पैकेज स्थापित करने के लिए किया जाता है, लेकिन apt-getइसका उपयोग किसी भी प्रोग्रामिंग भाषा में बनाए गए पैकेजों को स्थापित करने के लिए किया जाता है।

आपकी मुख्य समस्या दोनों मामलों में सही पैकेज नाम खोजना है:

pip search pyudev

पैकेज के लिए आप सही नाम दे देंगे आप उपयोग कर स्थापित करना चाहते हैं pip installके रूप में,

apt-cache search pyudev

उस पैकेज के लिए आपको सही नाम देगा जिसे आप उपयोग करके इंस्टॉल करना चाहते हैं apt-get install:

radu@Radu: ~ $ pip search pyudev
pyudev                    - A libudev binding
radu@Radu: ~ $ apt-cache search pyudev
python-pyudev - Python bindings for libudev
python3-pyudev - Python3 bindings for libudev

तो, शामिल होने में, संवाददाता sudo apt-get install python-pyudevहै sudo pip install pyudev, नहीं sudo pip install python-pyudev

अब आप पर निर्भर करता है कि आप क्या चुनना चाहते हैं जब आप एक अजगर पैकेज स्थापित करना चाहते हैं: pipया apt-get। उदाहरण के लिए यह देखें कि Q & A में पैकेज का उपयोग करने pipऔर स्थापित करने में अंतर के बारे में है apt-get


2

मेरा पसंदीदा तरीका हमेशा उपयोग करना है aptऔर केवल मामले में मॉड्यूल अभी तक उपयोग करने के लिए डेबियन / उबंटू रिपॉजिटरी में उपलब्ध नहीं है pip, लेकिन केवल उपयोगकर्ता संदर्भ में - --userध्वज। pipवैसे भी एक का उपयोग करके सभी बिल्ड-डिपेंडेंसी को उबंटू के रिपॉजिटरी से कहने के लिए स्थापित करना होगा या उन्हें स्वयं प्रदान करना होगा जो एक थकाऊ काम हो सकता है। डाउनलोड करने के बाद उन्हें apt-getबनाते समय बाइनरी पैकेज स्थापित pipकरें। एक को सिस्टम स्थानों में मॉड्यूल स्थापित करने के लिए पाइप का उपयोग नहीं करना चाहिए। यह सादा गलत है। --userघर के स्थान पर मॉड्यूल स्थापित करने के लिए हमेशा ध्वज का उपयोग करें । ठीक से कॉन्फ़िगर PYTHONPATH अजगर को पहले घर से मॉड्यूल लेने के लिए और फिर सिस्टम मॉड्यूल के साथ स्थापित करने दें apt-get

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.