अगर python3 में कोई मॉड्यूल या पैकेज पहले से स्थापित है, तो कैसे जांचें?


10

यह सत्यापित करने की आवश्यकता है कि यह प्रोग्राम चलने से पहले स्थापित है या नहीं।


2
बस चलाओ pip install। यदि यह पहले से स्थापित है, तो यह इसे फिर से स्थापित नहीं करेगा।
जोर्डनम

Thnk आप jordanm, लेकिन मुझे जांच करने और फिर ao / p देने की आवश्यकता है।
हबट्रिक्स

जवाबों:


3

खोल में टाइप करें: pydoc modules
यह मॉड्यूल को सूचीबद्ध करेगा और आप उस मॉड्यूल को पकड़ सकते हैं जो आप चाहते हैं।
Stackoverflow पर मिले यहाँ


11

आप का उपयोग करना चाहिए pipके listग्रेप साथ आदेश, कि केवल सूचियों इंस्टॉल किए गए पैकेज (नहीं सभी मॉड्यूल और अपने पड़ोसियों के साथ-साथ):

pip list | grep -F package_name

यदि package_name कई स्थापित संकुल से मेल खाता है, जैसे कि botoजब botocoreभी स्थापित किया गया है, तब खोज करना , तो मदद के -wबजाय -F@TaraPrasadGurung से पता चलता है। यह सटीक पैकेज को सूचीबद्ध नहीं करता है, जैसा -wकि शब्द सीमाओं के रूप में पैकेज नामों में सामान्य वर्णों को देखता है। तो अगर आप requestsऔर requests-cacheस्थापित या या ruamel.yamlनष्ट कर दिया है। श्यामल। Cmd` और उत्पादन की एक पंक्ति की आवश्यकता है, तो आपको कुछ करने की आवश्यकता है:

pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "

कृपया ध्यान दें कि चूंकि .उपयोग करते समय किसी भी वर्ण से मेल खाता है -E, इसलिए आपको इससे बचने की आवश्यकता है


और हाँ यह आवश्यक है क्योंकि एक पैकेज है ruamel_yaml। प्रत्येक पैकेज प्रबंधक pipसंगत नहीं है जब नेमस्पेस पैकेज के साथ काम कर रहा है।


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

@TaraPrasadGurung हालांकि यह आउटपुट को कम करने में मदद कर सकता है, लेकिन जैसा कि आप दावा करते हैं, यह सटीक पैकेज प्राप्त करने में मदद नहीं करता है। उदाहरण के लिए, डॉट और डैश -wशब्द सीमाओं के रूप में लिए गए हैं और पैकेज नामों में सामान्य हैं। जब मैं आपके सुझाव का उपयोग करता हूं तो मुझे कई मैच मिलते हैं grep -w ruamel.yamlयाgrep -w request
एंथन

pip list | grep -F mxnet-cu101प्रिंट करता है mxnet-cu101 1.5.0, लेकिन बिल्कुल नहीं जहां यह स्थापित है। किसी भी विचार कैसे स्थापित पथ पाने के लिए? `
अनु

@ हां, मेरे पास एक अच्छा विचार है कि कैसे प्राप्त करने के लिए जहां एक पायथन पैकेज स्थापित किया गया है, मुझे इसका नाम पता है। आपको इस साइट पर एक प्रश्न पोस्ट करना चाहिए और मेरे ध्यान में रखते हुए मुझे यहाँ पिंग करना चाहिए, क्योंकि मैं U & L पर नए पोस्ट किए गए प्रश्नों का पालन नहीं करता हूँ।
एंथन

4

अगर पैकेज कुछ पागल नहीं करता है या आयात करने में समय लगता है तो आप वास्तव में इसे आयात करने की कोशिश कर सकते हैं:

if python -c "import package_name" &> /dev/null; then
    echo 'all good'
else
    echo 'uh oh'
fi

2

मुझे मौजूदा उत्तर अधूरे और अच्छे पर्याप्त उदाहरणों की कमी के कारण मिले हैं। यहाँ समाधान मैं पर सेट है:

# an example checking if the pandas package is installed
if python -c 'import pkgutil; exit(not pkgutil.find_loader("pandas"))'; then
    echo 'pandas found'
else
    echo 'pandas not found'
fi

इस उदाहरण का एक Github gist यहां पाया जा सकता है: https://gist.github.com/shaypal5/d505af9953cd86f59c750fa600ee4ba6


यह वास्तव में के समान दिखता है एक मौजूदा जवाब
जेफ स्कालर

1
बैश कोड समान है, पायथन कोड अलग है, जो काफी अंतर करता है। मैंने स्वयं को जोड़ने के लिए चुनने से पहले सभी मौजूदा उत्तर पढ़े हैं, और आपके द्वारा जोड़ा गया विशिष्ट उत्तर मेरे लिए काम नहीं करता। इस प्रकार, मुझे यहां अपना उत्तर जोड़ने के लिए प्रासंगिक और मूल्यवान लगता है। :)
ShayPal5

1

आप अपनी स्क्रिप्ट्स में भी कुछ इस तरह का उपयोग कर सकते हैं।

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

पैकेज स्थापित न होने पर आपको क्या मिलेगा।

Package=psutil
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
1

पैकेज स्थापित होने पर आपको क्या मिलेगा।

Package=requests
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
0

Python2 और python3 में काम करता है, और फिर आप बाहर निकलने के कोड के आधार पर इंस्टॉल करते हैं।


0

मैंने स्क्रिप्ट में उपयोग के लिए एंथन के उत्तर का थोड़ा सख्त संस्करण इस्तेमाल किया:

pip3 list |
    grep -v "^Package *Version$" | grep -v "^-*$" |
    cut -d ' ' -f 1 |
    grep -xF "$package_name"

पहले दो ग्रीप्स को पाइप 3 के आउटपुट से हेडर लाइनों को हटाने का इरादा है।

कट तब केवल पैकेज नामों (संस्करण संख्याओं को छोड़कर) का चयन करता है।

फिर अंतिम grep प्रासंगिक के लिए सटीक खोज कर सकता है $package_name

यदि पैकेज पाया जाता है, तो यह पैकेज नाम प्रदर्शित करेगा, और बाहर निकलने के कोड के साथ वापस लौटेगा। 0. यदि आप पैकेज का नाम नहीं देखना चाहते हैं, तो उसके साथ अंत करें >/dev/null



0

Pip3 के साथ परीक्षण किया गया:

$> pip3 show MODULENAME

यदि मॉड्यूल स्थापित है, तो निकास कोड ($!) "0" होगा, "1"।

ग्रेपिंग को "झूठी सकारात्मक" की समस्या है: एक का उत्पादन

pip list | grep NAME

किसी भी मॉड्यूल पर मेल करेगा जिसका नाम "NAME" है, उदाहरण के लिए "some_other_NAME" से भी मेल खाता है।

जबकि

pip3 show MODULENAME

केवल पूर्ण मैचों पर मेल खाता है।

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