क्या पाइप ओवरराइट को उपयुक्त द्वारा स्थापित किया जाता है?


9

क्या होगा यदि मैं गलती से pip installएक पैकेज है कि मैं पहले से ही का उपयोग कर स्थापित apt-getकिया है? क्या मुझे बस नवीनतम संस्करण का उपयोग करने के लिए मिलता है (यानी शायद एक जिसे मैंने स्थापित किया है pip)? क्या होता है दूसरा रास्ता गोल?

नोट: मैं एक आभासी वातावरण में पायथन का उपयोग नहीं करता (केवल इसलिए कि मुझे नहीं पता कि मुझे क्यों करना चाहिए - मैं डेटा विश्लेषण उपकरण के रूप में पायथन का उपयोग करता हूं और ज्यादातर हर चीज के नवीनतम संस्करण का उपयोग करने की कोशिश करता हूं)।


अगर मैं गलत नहीं हूं, तो आप उसी पैकेज का उपयोग करके इंस्टॉल नहीं करते हैंapt-getpip
Lucio

यदि आप चाहते हैं तो Corerct, pipउन्हें /usr/localउपनिर्देशिका में डिफ़ॉल्ट रूप से या किसी अन्य निर्देशिका में स्थापित करता है ।
तिमो

3
लेकिन क्या होता है, उदाहरण के लिए, अगर मैं पहली बार apt-get install python-pandasपीछा करता हूं pip install pandas, या दूसरे तरीके से? मेरे वैश्विक अजगर स्थापना को कैसे पता है कि दोनों संस्करणों में से किसका उपयोग करना है?
फ्रेड एस

1
@ फ़्रेड्स: टर्मिनल में निम्न कमांड चलाएं, पायथन उस मॉड्यूल के लिए विशिष्ट क्रम में खोजेगा:python -c "import sys; print sys.path"
टिमो

जवाबों:


3

जैसा कि @Timo ने अपनी टिप्पणी में उल्लेख किया है, python -c "import sys; print sys.path"आपको पायथन के अपने इंस्टॉलेशन के लिए पायथन मॉड्यूल लोड पथ देगा। 16.04 की अपेक्षाकृत ताज़ा स्थापना पर, नोट की तीन निर्देशिकाएं हैं (10 कुल में से जो मेरी थीं)

  • '' (आवेदन की निर्देशिका)
  • '/usr/local/lib/python2.7/dist-packages' (जहां पाइप मॉड्यूल स्थापित करता है)
  • '/usr/lib/python2.7/dist-packages' (जहां उपयुक्त इंस्टाल मॉड्यूल)

हालांकि, यह नोट करना सबसे महत्वपूर्ण है कि '/usr/local/lib/python2.7/dist-packages' '/usr/lib/python2.7/dist-packages' की तुलना में पूर्वगामी है।

यदि आप पहले apt (-get) के माध्यम से पायथन पैकेज स्थापित करते हैं, तो यह '/usr/lib/python2.7/dist-packages' में स्थापित हो जाएगा। यदि आप बाद में मॉड्यूल को स्थापित करने के लिए पाइप का उपयोग करते हैं, तो पाइप शुरू में एक चेतावनी देगा कि निर्भरता पहले से ही पूरी हो गई है, फिर बाहर निकलें; - अपग्रेड फ्लैग को जोड़ने से पाइप को '/usr/local/lib/python2.7/dist-packages' में इंस्टॉल करने के लिए मजबूर कर देगा। (आउटपुट को नोटिस करें जो यह भी कहता है कि '/usr/lib/python2.7/dist-packages' में संस्करण अनइंस्टॉल नहीं किया गया है) आप तब सत्यापित कर सकते हैं कि पाइप-इंस्टॉल किया गया संस्करण निम्नलिखित का उपयोग करके उपयोग किया जा रहा है python -c "import MODULE; print MODULE.__file__":।

इस प्रकार, यह दिखाता है कि पाइप के माध्यम से स्थापित संकुल सिस्टम-अधिष्ठापित संकुल पर पूर्वता लेगा, लेकिन apt (-get) से संस्थापित कुछ को अधिलेखित नहीं करेगा।


1

@ ब्रायन व्याट में जोड़ने के लिए, यह वांछनीय (और इच्छित) लगता है कि पीआईपी स्थापित / अपग्रेड किए गए आइटम को पूर्ववर्ती (संभवतः पुराने) एपीटी स्थापित पैकेजों पर लेना चाहिए। मेरे सिस्टम में उपयुक्त और पाइप पथ उलट थे। यह होना चाहिए (अन्य प्रविष्टियों की अनदेखी):

  • '/usr/local/lib/python2.7/dist-packages' (जहां पाइप मॉड्यूल स्थापित करता है)
  • '/usr/lib/python2.7/dist-packages' (जहां उपयुक्त इंस्टाल मॉड्यूल)

फिर भी मेरे द्वारा की गई कुछ अज्ञात कार्रवाई के कारण, ये रास्ते मेरे लिए विपरीत क्रम में दिखाई दिए (अन्य प्रविष्टियों की अनदेखी)

  • '/usr/lib/python2.7/dist-packages' (जहां उपयुक्त इंस्टाल मॉड्यूल)
  • '/usr/local/lib/python2.7/dist-packages' (जहां पाइप मॉड्यूल स्थापित करता है)

यह मेरे द्वारा जोड़े गए कुछ /usr/lib/python2.7/dist-packagesको पूरा करता है /usr/local/lib/python2.7/dist-packages/easy-install.pth। बस easy-install.pthमेरे लिए गलत तरीके से तय की गई लाइन को हटा देना । /usr/lib/python2.7/dist-packagesअभी भी मेरे रास्ते में है, क्योंकि यह बाद के चरण में कहीं और जुड़ जाता है।

एक साइड नोट के रूप में, pprint आपके रास्ते को अच्छे प्रदर्शित करेगा ... अर्थात:

$ python -c "import sys; import pprint; pprint.pprint(sys.path)"
['',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.