2017-08-21 23 views
6

का उपयोग कर सूची से संकुल को संस्थापित करना मैं पाइप का उपयोग कर संकुलों की एक सूची स्थापित करने की कोशिश कर रहा हूं।पीआईपी

कोड जो मैं प्रयोग किया जाता है:

import pip 

def install(package_name): 
     try: 
      pip.main(['install', package_name]) 
     except: 
      print("Unable to install " + package_name) 

इस कोड को ठीक काम करता है और अगर एक पैकेज उपलब्ध नहीं है, यह एक त्रुटि देता है:

No matching distributions found

हालांकि, मुझे क्या करना कोशिश कर रहा हूँ अगर कोई स्थापना विफल हो जाती है (उदाहरण के लिए: अवैध पैकेज नाम), मैं उस पैकेज को मुद्रित करना चाहता हूं जो विफल रहा।

इसके लिए क्या किया जा सकता है?

किसी भी मदद की सराहना की जाएगी, धन्यवाद।

+0

https://github.com/pypa/pip/blob/21be153044a7aa245e12ce3f86793e9b17201519/pip/index.py#L525 – Juggernaut

उत्तर

5

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

import pip 

def install(package_name): 
     try: 
      pipcode = pip.main(['install', package_name]) 
      if pipcode != 0: 
       print("Unable to install " + package_name + " ; pipcode %d" % pipcode) 
     except: 
      print("Unable to install " + package_name) 
2

आप सत्यापित करने के लिए पैकेज के मूल्य देख सकते हैं कि कोई मिलता-जुलता वितरण को खोजने था। अगर एक स्थापना उम्मीदवार मौजूद है आम तौर पर पैकेज 0 वापस आ जाएगी, अन्यथा कोई उम्मीदवार के लिए 1 वापस आ जाएगी पाया

import pip 

def install(package_name): 
    package = pip.main(['install', package_name])  
    result = "Package successfully installed: " if package == 0 else "Unable to find package: " 
    print(result + package_name) 

इसलिए, यदि आप कुछ इस तरह से करने की कोशिश:

>>> install("Virtualenvs") 

वापसी करेंगे:

Collecting virtualenvs 
Could not find a version that satisfies the requirement virtualenvs (from versions:) 
No matching distribution found for virtualenvs 
Unable to find package: virtualenvs 

क्योंकि "Birtualenvs" के लिए कोई वैध पैकेज नहीं है। लेकिन एक वैध पैकेज के साथ:

>>> install("virtualenv") 

वापसी करेंगे:

Requirement already satisfied: virtualenv in/usr/lib/python2.7/dist-packages 
Package successfully installed: virtualenv 
+0

'try- यदि कोई अपवाद नहीं है तो 'else' ब्लॉक को छोड़कर ब्लॉक निष्पादित करता है। इस मामले में, कोई अपवाद नहीं है, क्योंकि त्रुटि कोड 'pip.main()' विधि द्वारा वापस किया जाता है। इस मामले में, मुझे लगता है कि आपको वापसी मूल्य में एक त्रुटि कोड की जांच करने के लिए मजबूर होना पड़ता है, अन्यथा आप सफल इंस्टॉल के लिए "इंस्टॉल करने में असमर्थ" संदेश प्रिंट करेंगे। – tdube

+0

आप सही हैं, भले ही मैंने एक वैध पैकेज सेट किया हो, फिर भी यह किसी वैध पैकेज के लिए मैसेंजर को वापस नहीं कर रहा था –

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