2015-12-05 3 views
30

में अपग्रेड पाइप मैं अमेज़ॅन लिनक्स एएमआई 2015.09.1 ​​पर अपने पायथन ऐप को तैनात करना चाहता था, जिसमें पायथन 2.7 (डिफ़ॉल्ट) और पीआईपी (6.1.1) है। फिर, मैं पिप आदेश का उपयोग कर उन्नत बनाया:अमेज़ॅन लिनक्स

sudo pip install -U pip 

हालांकि, यह टूट लग रहा था, और संदेश से पता चला जब मैं पैकेज इंस्टॉल करने की कोशिश की:

pkg_resources.DistributionNotFound: pip==6.1.1 

मुझे पता चला कि पिप पिछले फ़ाइलों को हटा दें /usr/bin/ में स्थित है, और /usr/local/bin में नया स्थापित किया है। इस प्रकार, मैं कमांड का उपयोग करके स्थान को निर्दिष्ट करने की कोशिश की:

sudo pip install -U --install-option="--prefix='/usr/bin'" pip 

फिर भी, यह अभी भी /usr/local/bin में नया एक स्थापित। इसके अलावा, sudo के साथ पीआईपी अच्छी तरह से काम नहीं कर सका हालांकि यह सफलतापूर्वक स्थापित हुआ। त्रुटि संदेश:

sudo: pip2.7: command not found 

क्या पीपी का सही ढंग से प्रबंधन करने का कोई तरीका है?

+1

sudo का उपयोग नहीं करते,/usr/स्थानीय/बिन पिप – abolotnov

+0

@abolotnov यह हमेशा sudo बिना त्रुटि संदेश से पता चला है के लिए सही स्थान है। संदेश: अनुमति अस्वीकार कर दी गई: '/usr/local/lib/python2.7/site-packages/xxxxx.py' – zeck

+0

'sudo/usr/lib/local/pip install - अपग्रेड पाइप' – abolotnov

उत्तर

33

प्रयास करें:

sudo which pip 

इस तरह '($ PATH) में कोई पिप' कुछ पता चल सकता है।

अगर ऐसा है, तो आप कर सकते हैं:

which pip 

जो तुम /usr/local/bin/pip की तरह एक पथ दे देंगे।

कॉपी + पेस्ट पथ चलाकर sbin फ़ोल्डर में रंज के लिए: sudo cp /usr/local/bin/pip /usr/sbin/

यह आपको किसी भी त्रुटि के बिना sudo pip चलाने के लिए अनुमति देगा।

0

मुझे लगता है कि आपने pythonXX-pip पैकेज स्थापित नहीं किया है।

मैंने अपनी सीधे पाइथन 3.4 में अपग्रेड कर दिया है, ये आदेश मेरे लिए काम करते हैं।

sudo su 
yum install python34 
yum install python34-pip 
2

इस के लिए मुझे

sudo /usr/local/bin/pip install --upgrade pip 
8

समस्या आंशिक रूप से अपने प्रश्न का जवाब है काम करता है। अमेज़ॅन एएमआई रूट खाते के पथ का हिस्सा बनने के लिए /usr/local/bin पर विचार नहीं करता है। आप इसे शामिल करने के लिए रूट खाते के ~/.bashrc को अपडेट करके इसे ठीक कर सकते हैं।

इस तरह कुछ ...

export PATH=$PATH:/usr/local/bin

+0

चाल किया था और अमेज़न linux पर काम किया। – Stryker

+0

यह पूरी तरह से काम किया। –

22

थोड़ी देर के लिए इस के साथ संघर्ष किया। यहाँ मैं क्या मिला है या नहीं:

  • ec2_user पाता pip निष्पादन योग्य है, लेकिन कोई पढ़ने//usr/local/lib/python2.7/site-packages फ़ोल्डर में pip फ़ोल्डरों पर अनुमतियाँ निष्पादित होने other की वजह से एक मॉड्यूल आयात त्रुटि है।यह वास्तव में ठीक है, क्योंकि ज्यादातर मामलों में, pip किसी भी तरह root के रूप में नहीं चलने पर विफल रहता है।
  • sudopip नहीं मिला।
  • rootsudo su - के साथ pip को बिना किसी समस्या के चलाने की अनुमति देता है।

कारण sudo pip बंद हो जाता है उन्नयन के बाद काम करना, क्योंकि निष्पादन योग्य (या प्रतीकात्मक कड़ी) /usr/bin से निकाल दिया जाता है।

#!/usr/bin/python2.7 
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==6.1.1','console_scripts','pip2.7' 
__requires__ = 'pip==6.1.1' 
import sys 
from pkg_resources import load_entry_point 

if __name__ == '__main__': 
    sys.exit(
     load_entry_point('pip==6.1.1', 'console_scripts', 'pip2.7')() 
    ) 

तो, कि जहां हमारे त्रुटि, से के रूप में उन्नयन स्पष्ट रूप से इस फ़ाइल को साफ नहीं करता है आता है: हालांकि, क्या रहता है जो निम्नलिखित शामिल हैं एक फ़ाइल pip-27 कहा जाता है, है। pip से pip-2.7 पर नाम अनुवाद कहां से पूरी तरह स्पष्ट नहीं है।

जैसा कि एक अन्य उत्तर में बताया गया है, pip अब अपग्रेड के बाद /usr/local/bin में मौजूद है, जो अब sudo सुरक्षित पथ में नहीं है। आप sudo visudo चलाकर secure_path चर पर इस पथ को जोड़ सकते हैं। एक और विकल्प, यदि आप अपने secure_path पर उस पथ को नहीं जोड़ना चाहते हैं तो /usr/bin में निष्पादन योग्य नए प्रतीक के लिए एक प्रतीकात्मक लिंक बनाना है।

+0

अच्छा स्पष्टीकरण @ Sector95। मूल कारण की नकल की। यह स्वीकार्य उत्तर होना चाहिए। – Pramit

4

घंटे के लिए इस के साथ संघर्ष कर और पढ़ने टिप्पणी के बाद

which pip दिया/usr/bin/पिप, लेकिन वास्तविक पिप पर/usr/स्थानीय/बिन स्थित था/कारण पिप उन्नयन पिप और नहीं था साफ करने के लिए पूरा

तो/usr/bin में पिप को हटाने/

sudo rm/usr/bin/पिप

और भी जोड़ने अपने निर्यात पथ के लिए नए पिप

vim ~/.bash_profile

पथ = $ पथ: $ HOME/बिन:/usr/स्थानीय/बिन

बाहर निकलने के टर्मिनल, और वापस के लिए लॉग इन

which pip/usr/स्थानीय/bin/देना चाहिए पिप

pip install --upgrade pip 
0

मैं सोचें कि इस मामले में सबसे अच्छी रणनीति pip को प्रबंधित करने के लिए सिस्टम-स्तरीय संस्करण के साथ गड़बड़ करने के बजाय virtualenv का उपयोग करके वर्चुअल वातावरण के हिस्से के रूप में है।

आप उस के साथ ठीक हैं, तो यहां मूल विचार है:

  1. virtualenvpip के संस्करण आप सिस्टम स्तर pip करने के लिए उन्नत करने के लिए देख रहे हैं के साथ पैक के संस्करण स्थापित करें (उदाहरण के लिएvirtualenv==15.1.0pip==9.0.1 के साथ आता है):

     
    $ sudo pip install -U virtualenv==15.1.0 
    You are using pip version 6.1.1, however version 9.0.1 is available. 
    You should consider upgrading via the 'pip install --upgrade pip' command. 
    Collecting virtualenv==15.1.0 
        Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB) 
        100% |████████████████████████████████| 1.8MB 135kB/s 
    Installing collected packages: virtualenv 
        Found existing installation: virtualenv 12.0.7 
        Uninstalling virtualenv-12.0.7: 
         Successfully uninstalled virtualenv-12.0.7 
    Successfully installed virtualenv-15.1.0 
    

    मैं virtualenv release notes इस्तेमाल किया पता लगाने के लिए pip का कौन सा संस्करण जो virtualenv के संस्करण से मेल खाती है।

  2. आभासी माहौल बनाएँ:

     
    $ virtualenv myenv 
    New python executable in /home/ec2-user/myenv/bin/python2.7 
    Also creating executable in /home/ec2-user/myenv/bin/python 
    Installing setuptools, pip, wheel...done. 
    
  3. आभासी वातावरण सक्रिय और संस्करण और उन्नत pip के स्थान की पुष्टि:

     
    $ source myenv/bin/activate 
    (myenv) $ pip -V 
    pip 9.0.1 from /home/ec2-user/myenv/local/lib/python2.7/dist-packages (python 2.7) 
    (myenv) $ which pip 
    ~/myenv/bin/pip 
    

यह आपको पैकेज इंस्टॉल करने की अनुमति चाहिए इस virtualenv अपनी पसंद के pip संस्करण का उपयोग कर, 012,359 की आवश्यकता के बिना करने के लिए।

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