जवाबों:
यह कैसे पता करें कि सिस्टम में अजगर मॉड्यूल स्थापित है या नहीं: आप टर्मिनल में बहुत आसान परीक्षण कर सकते हैं,
$ 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
स्थानीय आभासी वातावरण में उपयोग करके संकुल कैसे स्थापित करें ।
vpython
आपको इसे स्थापित करने की आवश्यकता हैsudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
sudo pip
; यह सिस्टम अजगर को तोड़ सकता है। सिस्टम अजगर के लिए संकुल स्थापित करने के लिए apt-get का प्रयोग करें। आप pip --user
अपने लिए पायथन पैकेज स्थापित करने के लिए विकल्प या वर्चुअनव का उपयोग कर सकते हैं ।
मामले में हम अनचाहे तौर पर प्रश्न में मॉड्यूल का आयात नहीं करना चाहते हैं (जो कि एक 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
उन्हें एक बार आयात करके शब्दकोश में जोड़ सकते हैं ।
sys.modules
केवल ऐसे मॉड्यूल शामिल हैं जो पहले से ही आयात किए गए हैं , इसलिए यह परीक्षण करने के लिए एक विश्वसनीय तरीका नहीं है कि क्या मॉड्यूल स्थापित किया गया है। सबसे विश्वसनीय परीक्षण एक try/except
और जाल का उपयोग करना है ImportError
, जैसा कि कई अन्य पहले से ही सुझा चुके हैं।
sys.modules
पूरी तरह से अप्रासंगिक है और मुझे लगता है कि इसका कोई भी उल्लेख भ्रामक है। लेकिन शायद वह सिर्फ मैं ही हूं।
sys.modules
यहाँ कोई मदद नहीं है।
दूसरा तरीका 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
print()
पायथन 2 में भी ठीक काम करेगा; इसे एक समूह-के-पैरेंस सिंटैक्स के रूप में माना जाता है, और इसका कोई साइड इफेक्ट नहीं है। केवल जब आप कई आइटम जोड़ना चाहते हैं (जैसा कि print('a', 'b')
इसमें माना जाएगा एक के रूप में tuple
, जिसमें आपको इसकी आवश्यकता है from __future__ import print_function
, लेकिन यह इस मामले में लागू नहीं है, आप सिर्फ पार्न्स जोड़कर आगे-संगत कोड लिख सकते हैं (मैंने अपने परिवर्तनों का परीक्षण किया है) पायथन 2 और 3 में)।
मुझे पता है कि ओपी मूल रूप से पायथन शुरू करने के बाद एक समाधान के लिए कहा था, लेकिन अजगर के बाहर मैं उपयोग करता हूं pip
। Ubuntu पर:, sudo apt-get install python-pip
अगर यह पहले से स्थापित नहीं है।
फिर यह देखने के लिए कि कौन से तीसरे पक्ष के मॉड्यूल उपलब्ध हैं, बस चलाएं:
pip freeze
या और भी
pip list
और दोनों आपको स्थापित सभी मॉड्यूल और उनके संस्करण दिखाएंगे।
यदि आप जिस मॉड्यूल की तलाश कर रहे हैं वह स्थापित नहीं है, तो अधिकांश समय आप इसे आसानी से पाइप के साथ स्थापित कर सकते हैं:
pip install <module-name>
यदि आप सुनिश्चित नहीं हैं कि कोई मॉड्यूल मौजूद है या उसका PyPI नाम क्या है, तो उपयोग करें pip search
:
pip search <keyword>
pip show <module-name>
यह दिखाएगा कि क्या एक पैकेज स्थापित है, उदाहरण के लिए pip show numpy
।
आप कोड को अंदर 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
एक और जवाब देने के लिए, पूरा करने के लिए:
आप (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
इसके लिए क्या इरादा था; लेकिन यह एक ऐसी विधि है जिसके लिए यदि आप एक त्वरित परीक्षा चाहते हैं तो कम से कम टाइपिंग की आवश्यकता है :-)
grep -q
अनावश्यक को अशक्त करने के लिए पुनर्निर्देशन करता है।
/dev/null
वर्षों में बहुत सारे बेकार रीडायरेक्ट टाइप किए हैं : - /
मैंने पाया कि मेरे इंफ्रास्ट्रक्चर को बेहतर बनाने के लिए ** बेकार, मुझे एक ऑन्लाइनर में शेल से पैकेज की जांच करने में सक्षम होना चाहिए। मैंने @ 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 सभी में अजगर पैकेजों को प्रबंधित करने के लिए प्लगइन्स हैं, लेकिन आप खुद को मेरे जैसी स्थिति में पा सकते हैं, जहां आप एक पुराने संस्करण का उपयोग कर रहे हैं और हटाए गए प्लगइन्स का उपयोग नहीं करना चाहते हैं।
कोई भी उपयोग pydoc modules
कर सकता है, जिसे grep
किसी विशिष्ट मॉड्यूल को खोजने के लिए फ़िल्टर किया जा सकता है । आउटपुट स्तंभित प्रारूप में प्रदर्शित होता है। इस दृष्टिकोण का एकमात्र नुकसान यह है कि इसमें मौजूदा कामकाजी निर्देशिका में अजगर फाइलें भी शामिल होंगी। बहरहाल, मैं इसका ज्यादातर समय खुद इस्तेमाल करता हूं और यह इस संबंधित प्रश्न पर उच्च उद्धृत दृष्टिकोणों में से एक है: https://stackoverflow.com/q/739993/3701431
उबंटू शेल से, डिफ़ॉल्ट बैश द्वारा, जितना सरल है
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
इसे लिखते समय, pip show ...
सबसे आसान तरीका लगता है:
https://pip.pypa.io/en/stable/reference/pip_show/
जब पैकेज स्थापित नहीं होता है तो यह मौन है (यानी कुछ भी नहीं लौटाता)।