मैं कैसे जांच सकता हूं कि क्या पायथन में एक मॉड्यूल स्थापित है, और यदि आवश्यक हो तो इसे स्थापित करें?


89

टर्मिनल में, मैं पायथन शुरू करने के बाद, मुझे कैसे पता चलेगा कि अजगर में कौन से मॉड्यूल मौजूद हैं? मान लीजिए, मुझे मॉड्यूल NumPy और SciPy सीखने की आवश्यकता है।

  • यदि यह स्थापित नहीं है तो मैं इसे कैसे स्थापित करूंगा?
  • अगर यह पहले से ही स्थापित है तो मुझे कैसे पता चलेगा?

जवाबों:


73

यह कैसे पता करें कि सिस्टम में अजगर मॉड्यूल स्थापित है या नहीं: आप टर्मिनल में बहुत आसान परीक्षण कर सकते हैं,

$ python -c "import math"
$ echo $?
0                                # math module exists in system

$ python -c "import numpy"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named numpy
$ echo $?
1                                # numpy module does not exist in system

यदि यह स्थापित नहीं है तो मैं इसे कैसे स्थापित करूंगा

आप रिपॉजिटरी से संबंधित पैकेज डाउनलोड करके विशिष्ट मॉड्यूल स्थापित कर सकते हैं, उदाहरण के लिए आप निम्न के रूप में स्थापितscipy कर सकते हैं ,

sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3

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

pip install numpy

चेतावनी: केवल आधिकारिक उबंटू रिपॉजिटरी का उपयोग करके अजगर-मॉड्यूल स्थापित करने की अत्यधिक अनुशंसा की जाती है और pipविधि को सुपरसुसर (यानी, के रूप में rootया उपयोग करने के लिए sudo) का उपयोग नहीं करना चाहिए । कुछ मामलों में यह सिस्टम अजगर को तोड़कर आपके सिस्टम को बेकार छोड़ सकता है।

pipस्थानीय आभासी वातावरण में उपयोग करके संकुल कैसे स्थापित करें ।


जैसे आपके उत्तर में गणित मॉड्यूल मौजूद है और अंकन के लिए ट्रेसबैक फ्लॉप दिखाई देता है और गूंज $ के लिए? आउटपुट 0 था, क्या इसका मतलब यह है कि मेरे सिस्टम में सुन्नता भी मौजूद है?
टेकजोला

1
हाँ, यह आपके सिस्टम में है।
souravc

यदि आपके पास मॉड्यूल खस्ता नहीं है, तो आप इसे कैसे आयात करेंगे? जब हम कोडिंग करते हैं तो हम सुन्न आयात * से आयात विवरण कहते हैं, क्या यह मॉड्यूल को स्थापित करेगा? यदि नहीं, तो हम एक नया मॉड्यूल कैसे स्थापित करेंगे?
टेकजोला

1
यह एक अलग सवाल होगा कि मॉड्यूल कैसे स्थापित किया जाए। अलग-अलग मॉड्यूल के लिए अलग-अलग पैकेज चाहिए। उदाहरण के लिए vpythonआपको इसे स्थापित करने की आवश्यकता हैsudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
souravc

1
उपयोग न करें sudo pip; यह सिस्टम अजगर को तोड़ सकता है। सिस्टम अजगर के लिए संकुल स्थापित करने के लिए apt-get का प्रयोग करें। आप pip --userअपने लिए पायथन पैकेज स्थापित करने के लिए विकल्प या वर्चुअनव का उपयोग कर सकते हैं ।
JFS

21

मामले में हम अनचाहे तौर पर प्रश्न में मॉड्यूल का आयात नहीं करना चाहते हैं (जो कि एक tryबयान में होगा ) हम sys.modulesपरीक्षण मॉड्यूल का उपयोग कर सकते हैं जो स्थापित हैं और पहले आयात किए गए थे।

अजगर खोल मामले में:

>>> import sys

फिर स्थापित मॉड्यूल के लिए परीक्षण करें:

>>> 'numpy' in sys.modules
True
>>> 'scipy' in sys.modules
False

ध्यान दें कि Trueइस परीक्षण पर देने से पहले केवल उन मॉड्यूलों को आयात किया गया था, अन्य सभी मॉड्यूल (भले ही स्थापित) में परिणाम होFalse.

अजगर कंसोल में tryएक importबयान का दूसरा विकल्प इनबिल्ट help()फ़ंक्शन कह रहा है । यह गैर-स्थापित मॉड्यूल के लिए एक दस्तावेज नहीं देगा, उदाहरण के लिए

>>> help('scipy')
no Python documentation found for 'scipy'

स्थापित मॉड्यूल के बहुत लंबे मदद दस्तावेजों के उत्पादन के साथ बाधित किया जा सकता है Q

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

sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3

स्थापना के बाद हम sys.modulesउन्हें एक बार आयात करके शब्दकोश में जोड़ सकते हैं ।


1
मुझे लगता है कि यह सबसे पायथनिक उत्तर है ....
गृजेश चौहान

3
इसका पहला भाग गलत है: sys.modulesकेवल ऐसे मॉड्यूल शामिल हैं जो पहले से ही आयात किए गए हैं , इसलिए यह परीक्षण करने के लिए एक विश्वसनीय तरीका नहीं है कि क्या मॉड्यूल स्थापित किया गया है। सबसे विश्वसनीय परीक्षण एक try/exceptऔर जाल का उपयोग करना है ImportError, जैसा कि कई अन्य पहले से ही सुझा चुके हैं।
ईखुमोरो

@ekhumoro - धन्यवाद, मैं अपने उत्तर को स्पष्ट करने के लिए संपादित करूँगा।
तकत

4
यह अभी भी पर्याप्त रूप से स्पष्ट नहीं है। यह देखते हुए कि प्रश्न पूछ रहा है कि कैसे पता लगाया जाए कि क्या एक मॉड्यूल स्थापित है ( आयातित नहीं ), sys.modulesपूरी तरह से अप्रासंगिक है और मुझे लगता है कि इसका कोई भी उल्लेख भ्रामक है। लेकिन शायद वह सिर्फ मैं ही हूं।
डेविड जेड

1
sys.modulesयहाँ कोई मदद नहीं है।
बिल्ली

19

दूसरा तरीका pkgutilमॉड्यूल है। पायथन 2 और 3 दोनों के साथ काम करता है:

python -c 'import pkgutil; print(1 if pkgutil.find_loader("module") else 0)'

आपको moduleअपने मॉड्यूल के नाम से बदलने की जरूरत है , उदाहरण:

$ python -c 'import pkgutil; print(1 if pkgutil.find_loader("math") else 0)'
1

2
मैंने आपको मेरे कुछ बदलावों से अवगत कराया; print()पायथन 2 में भी ठीक काम करेगा; इसे एक समूह-के-पैरेंस सिंटैक्स के रूप में माना जाता है, और इसका कोई साइड इफेक्ट नहीं है। केवल जब आप कई आइटम जोड़ना चाहते हैं (जैसा कि print('a', 'b')इसमें माना जाएगा एक के रूप में tuple, जिसमें आपको इसकी आवश्यकता है from __future__ import print_function, लेकिन यह इस मामले में लागू नहीं है, आप सिर्फ पार्न्स जोड़कर आगे-संगत कोड लिख सकते हैं (मैंने अपने परिवर्तनों का परीक्षण किया है) पायथन 2 और 3 में)।
मार्टिन टूरनोइज

@Carpetsmoker: इशारा करने के लिए धन्यवाद। मैं पुराने संस्करण में रोलबैक करता हूं।
cuonglm

यह एक बेहतरीन जवाब है। मैंने एक व्युत्पन्न उत्तर जोड़ा है जो एक निकास / स्थिति कोड (शेल स्क्रिप्ट प्रवाह नियंत्रण के लिए) लौटाता है और एक कमांड लाइन तर्क के रूप में मॉड्यूल का नाम लेता है। askubuntu.com/a/891384/146273
ब्रूनो ब्रोंस्की

वह काम किया! - बस exitइसे बदलने के लिए इसे शेल संदर्भ में इस्तेमाल किया जा सकता है:python -c 'import pkgutil; exit(0 if pkgutil.find_loader("math") else 2)'
एटी

12

मुझे पता है कि ओपी मूल रूप से पायथन शुरू करने के बाद एक समाधान के लिए कहा था, लेकिन अजगर के बाहर मैं उपयोग करता हूं pip। Ubuntu पर:, sudo apt-get install python-pipअगर यह पहले से स्थापित नहीं है।

फिर यह देखने के लिए कि कौन से तीसरे पक्ष के मॉड्यूल उपलब्ध हैं, बस चलाएं:

pip freeze

या और भी

pip list

और दोनों आपको स्थापित सभी मॉड्यूल और उनके संस्करण दिखाएंगे।

यदि आप जिस मॉड्यूल की तलाश कर रहे हैं वह स्थापित नहीं है, तो अधिकांश समय आप इसे आसानी से पाइप के साथ स्थापित कर सकते हैं:

pip install <module-name>

यदि आप सुनिश्चित नहीं हैं कि कोई मॉड्यूल मौजूद है या उसका PyPI नाम क्या है, तो उपयोग करें pip search:

pip search <keyword>

1
इसके अलावा, pip show <module-name>यह दिखाएगा कि क्या एक पैकेज स्थापित है, उदाहरण के लिए pip show numpy
हर्पीज़ फ्री इंजीनियर

10

आप कोड को अंदर try, exceptब्लॉक कर सकते हैं।

$ python3 -c "\
try:
    import cow  
    print('\nModule was installed')
except ImportError:
    print('\nThere was no such module installed')"

There was no such module installed

$ python3 -c "\
try:
    import regex
    print('\nModule was installed')
except ImportError:
    print('\nThere was no such module installed')"

Module was installed

6

एक और जवाब देने के लिए, पूरा करने के लिए:

आप (ab) -mविकल्प का उपयोग कर सकते हैं । पायथन के मैनपेज से:

   -m module-name
          Searches sys.path for the named module and runs the  correspond
          ing .py file as a script.

जो हमें देगा:

$ python2 -m numpy
/sbin/python2: No module named numpy.__main__; 'numpy' is a package and cannot be directly executed

$ python2 -m math
/sbin/python2: No code object available for math

लेकिन गैर-विद्यमान मॉड्यूल के लिए, यह हमें देगा:

$ python2 -m doesnt_exist
/sbin/python2: No module named doesnt_exist

हम इसका उपयोग grepमैच के लिए कर सकते हैं :

$ python2 -m doesnt_exist |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Nope

$ python2 -m math |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Yup

यह थोड़ा हैक-ईश है, और न कि -mइसके लिए क्या इरादा था; लेकिन यह एक ऐसी विधि है जिसके लिए यदि आप एक त्वरित परीक्षा चाहते हैं तो कम से कम टाइपिंग की आवश्यकता है :-)


4
grep -qअनावश्यक को अशक्त करने के लिए पुनर्निर्देशन करता है।
मुरु

3
@ मुरू यिकस! मैंने /dev/nullवर्षों में बहुत सारे बेकार रीडायरेक्ट टाइप किए हैं : - /
मार्टिन टूरनोइज

4

मैंने पायथन में एक उदाहरण लिखा:

import pip
import sys
from bigml.api import BigML


if not 'bigml' in sys.modules.keys():
    pip.main(['install', 'bigml'])

3

शेल ऑन्लाइनर चेक (प्रावधान के लिए उपयोगी)

मैंने पाया कि मेरे इंफ्रास्ट्रक्चर को बेहतर बनाने के लिए ** बेकार, मुझे एक ऑन्लाइनर में शेल से पैकेज की जांच करने में सक्षम होना चाहिए। मैंने @ congongm के उत्तर पर निर्माण किया। मुझे उल्टा करना पड़ा 1और 0क्योंकि मैं एक स्ट्रिंग को प्रिंट करने के बजाय एक निकास स्थिति पैदा कर रहा हूं।

python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader(sys.argv[1]) else 1)" pymongo

आप sys.argv[1]अपने पैकेज के एकल उद्धृत नाम के साथ प्रतिस्थापित कर सकते हैं , लेकिन मेरे प्रावधान लिपियों के लिए मुझे इसे अंत में होने की पठनीयता पसंद है।

python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('pymongo') else 1)"

** मुझे पता है कि शेफ , कठपुतली , और ansible सभी में अजगर पैकेजों को प्रबंधित करने के लिए प्लगइन्स हैं, लेकिन आप खुद को मेरे जैसी स्थिति में पा सकते हैं, जहां आप एक पुराने संस्करण का उपयोग कर रहे हैं और हटाए गए प्लगइन्स का उपयोग नहीं करना चाहते हैं।


1

कोई भी उपयोग pydoc modulesकर सकता है, जिसे grepकिसी विशिष्ट मॉड्यूल को खोजने के लिए फ़िल्टर किया जा सकता है । आउटपुट स्तंभित प्रारूप में प्रदर्शित होता है। इस दृष्टिकोण का एकमात्र नुकसान यह है कि इसमें मौजूदा कामकाजी निर्देशिका में अजगर फाइलें भी शामिल होंगी। बहरहाल, मैं इसका ज्यादातर समय खुद इस्तेमाल करता हूं और यह इस संबंधित प्रश्न पर उच्च उद्धृत दृष्टिकोणों में से एक है: https://stackoverflow.com/q/739993/3701431


0

उबंटू शेल से, डिफ़ॉल्ट बैश द्वारा, जितना सरल है

pip list | grep <package-name-Case-Matters>

उदाहरण

pip list | grep pywinrm

pip list | grep numpy

और, अगर आपको मामले के बारे में संदेह है (हालांकि मुझे लगता है कि सभी पैकेज नाम हमेशा कम होते हैं):

pip list | grep [Nn]um[Pp]y  # it works with numpy, Numpy, numPy, and NumPy

0

इसे लिखते समय, pip show ...सबसे आसान तरीका लगता है: https://pip.pypa.io/en/stable/reference/pip_show/

जब पैकेज स्थापित नहीं होता है तो यह मौन है (यानी कुछ भी नहीं लौटाता)।

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