मैं स्थानीय रूप से स्थापित पायथन मॉड्यूल की सूची कैसे प्राप्त कर सकता हूं?


996

मैं पायथन मॉड्यूल की एक सूची प्राप्त करना चाहूंगा, जो कि मेरे पायथन इंस्टॉलेशन (UNIX सर्वर) में हैं।

आप अपने कंप्यूटर में पायथन मॉड्यूल की सूची कैसे प्राप्त कर सकते हैं?


77
आप बस >>> मदद () और फिर >>> मॉड्यूल कर सकते हैं
जूलियस नेउमन

1
क्या कोई विकल्प है? मदद () मेरे लिए लटका हुआ है।
पाउलो कारवाल्हो

2
इनमें से बहुत सारे उत्तर मानते हैं कि आपके पास कमांड लाइन तक पहुंच है। यदि आप AWS लैम्ब्डा का उपयोग कर रहे हैं, तो आपको यह सब पायथन के अंदर से करना होगा। देखें stackoverflow.com/a/54939905/117471
ब्रूनो Bronosky

जवाबों:


610

समाधान

पाइप> 10.0 के साथ उपयोग न करें!

pip freezeपायथन लिपि से एक समान सूची पाने के लिए मेरा 50 सेंट :

import pip
installed_packages = pip.get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
     for i in installed_packages])
print(installed_packages_list)

एक लाइनर के रूप में (बहुत लंबा):

sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])

देते हुए:

['behave==1.2.4', 'enum34==1.0', 'flask==0.10.1', 'itsdangerous==0.24', 
 'jinja2==2.7.2', 'jsonschema==2.3.0', 'markupsafe==0.23', 'nose==1.3.3', 
 'parse-type==0.3.4', 'parse==1.6.4', 'prettytable==0.7.2', 'requests==2.3.0',
 'six==1.6.1', 'vioozer-metadata==0.1', 'vioozer-users-server==0.1', 
 'werkzeug==0.9.4']

क्षेत्र

यह समाधान सिस्टम स्कोप या वर्चुअल वातावरण स्कोप पर लागू होता है setuptools, pipऔर इसके द्वारा स्थापित पैकेजों को कवर करता है , और ( भगवान न करे ) easy_install

मेरा उपयोग मामला

मैंने इस कॉल के परिणाम को अपने फ्लास्क सर्वर में जोड़ा है, इसलिए जब मैं इसे कॉल करता हूं http://example.com/exampleServer/environment सर्वर के वर्चुअल सर्वर पर स्थापित पैकेजों की सूची मिलती है। यह डिबगिंग को बहुत आसान बना देता है।

चेतावनियां

मैंने इस तकनीक के एक अजीब व्यवहार को देखा है - जब पायथन दुभाषिया को एक setup.pyफ़ाइल के रूप में एक ही निर्देशिका में लागू किया जाता है , तो यह द्वारा स्थापित पैकेज को सूचीबद्ध नहीं करता है setup.py

प्रजनन करने कि प्रक्रिया:

एक आभासी वातावरण बनाएँ
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $ 
एक git रेपो के साथ क्लोन करें setup.py
(test_env) $ git clone https://github.com/behave/behave.git
Cloning into 'behave'...
remote: Reusing existing pack: 4350, done.
remote: Total 4350 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4350/4350), 1.85 MiB | 418.00 KiB/s, done.
Resolving deltas: 100% (2388/2388), done.
Checking connectivity... done.

हमने एक व्यवहार setup.pyकिया है /tmp/behave:

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
अजगर रेपो से अजगर पैकेज स्थापित करें
(test_env) $ cd /tmp/behave && pip install . 
running install
...
Installed /private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.egg
Finished processing dependencies for behave==1.2.5a1

यदि हम उपर्युक्त हल चलाते हैं /tmp

>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['behave==1.2.5a1', 'enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp'

यदि हम उपर्युक्त हल चलाते हैं /tmp/behave

>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp/behave'

behave==1.2.5a1दूसरे उदाहरण से गायब है, क्योंकि कार्यशील निर्देशिका में शामिल behaveकी setup.pyफ़ाइल।

मुझे प्रलेखन में इस मुद्दे का कोई संदर्भ नहीं मिला। शायद मैं इसके लिए एक बग खोल दूंगा।


5
इस उत्तर के लिए धन्यवाद! मुझे लगता है कि यह बेहतर ढंग से सवाल का जवाब देता है क्योंकि मैं "स्थानीय रूप से" पायथन मॉड्यूल स्थापित करता हूं। पिप फ्रीज़ भी हमेशा जाने का रास्ता नहीं है। यह बेहतर काम करता है - मुझे लगता है।
लेओ लेपोल्ड हर्ट्ज़ '27

3
@ मासी ने इस समाधान के विवरण की विस्तृत व्याख्या की है। यह वास्तव में एक अजीब है।
एडम मटन

21
एक विकल्प:import pkg_resources; installed_packages = [(d.project_name, d.version) for d in pkg_resources.working_set]
ebolyen

14
पाइप 10 के रूप में, यह उत्तर अब काम नहीं करेगा। @Ebolyen की टिप्पणी वैकल्पिक आदेशों को दिखाती है जो काम करते हैं। मैं उसी निष्कर्ष पर आया और नीचे पूरा संशोधित कोड पोस्ट किया।
Big_Al_Tx

5
पाइप के हाल के संस्करणों में, यह एक त्रुटि संदेश कहते हुए काम नहीं करेगा AttributeError: module 'pip' has no attribute 'get_installed_distributions'
HelloGoodbye

1037
help('modules')

पायथन शेल / प्रॉम्प्ट में।


10
@dF pydoc modulesकाम करता है। आपको इसे उत्तर के रूप में प्रस्तुत करना चाहिए।
एबजर्न

37
मुझे एक सीजी गलती दी!
ज़नबरी

3
nobar, zanbri, @Joe Frambach: उबंटू पर? यहाँ एक बग का वर्णन किया गया है: Bugs.launchpad.net/ubuntu/+source/python2.7//bug/896836
क्रिस्टोफ़ीड

2
मैं मॉड्यूल के बारे में अतिरिक्त जानकारी कैसे प्राप्त कर सकता हूं और वर्तमान संस्करण क्या है?
जिज्ञासु

5
python -c 'help("modules")'
केनोर्ब

285

अब, इन तरीकों को मैंने खुद आज़माया, और मुझे वही मिला, जो विज्ञापित किया गया था: सभी मॉड्यूल।

काश, वास्तव में आप stdlib के बारे में ज्यादा परवाह नहीं करते, आप जानते हैं कि आपको अजगर स्थापित करने के साथ क्या मिलता है।

वास्तव में, मुझे वह सामान चाहिए जो मैंने स्थापित किया था।

वास्तव में, आश्चर्यजनक रूप से, ठीक काम किया था:

pip freeze

जो लौटा:

Fabric==0.9.3
apache-libcloud==0.4.0
bzr==2.3b4
distribute==0.6.14
docutils==0.7
greenlet==0.3.1
ipython==0.10.1
iterpipes==0.4
libxml2-python==2.6.21

मैं "आश्चर्यजनक रूप से" कहता हूं क्योंकि पैकेज इंस्टॉल टूल वह सटीक जगह है जो इस कार्यक्षमता को खोजने की उम्मीद करेगा, हालांकि 'फ्रीज' नाम के तहत नहीं, लेकिन अजगर पैकेजिंग इतनी अजीब है, कि मैं भड़क गया हूं कि यह उपकरण समझ में आता है। पिप 0.8.2, पायथन 2.7।


4
मुझे लगता है कि नाम के पीछे का विचार यह है कि आपको अभी जो इंस्टॉल किया गया है उसका "फ्रोजन" स्नैपशॉट मिलता है, जिसे आप बाद में पाइप में फीड कर सकते हैं ताकि एक अलग वातावरण में स्थापित समान मॉड्यूल प्राप्त कर सकें।
रयान सी। थॉम्पसन

Arash, आप विंडोज में भी पाइप इंस्टॉल कर सकते हैं! पहले सेटअपटूल स्थापित करें और फिर पाइप स्थापित करने के लिए easy_install का उपयोग करें :)
gawbul

यह उत्कृष्ट है, लेकिन यह मेरे द्वारा स्थापित कुछ पुस्तकालयों को याद करता है। उदाहरण के लिए, यह PyQt को सूचीबद्ध नहीं करता है।
Junuxx

8
पाइप 1.3 से शुरू होकर सूची कमांड है।
पिओटर डोब्रोगोस्ट

यह काम करता हैं। क्या गड़बड़ अजगर है। वे अपने कार्य को एक साथ क्यों नहीं कर सकते हैं और रेल के समान समाधान के साथ आ सकते हैं? (Gemfile, बंडलर, rvm)
दिमित्रिस

106

पाइप संस्करण 1.3 के बाद से, आपको इसकी पहुँच मिल गई है:

pip list

जो कि "पिप फ्रीज़" के लिए सिंटैक्टिक शुगर लगती है। यह आपके इंस्टालेशन या वर्चुअनव के सभी मॉड्यूलों को सूचीबद्ध करेगा, साथ ही उनके संस्करण संख्याओं के साथ। दुर्भाग्य से यह किसी भी मॉड्यूल की वर्तमान संस्करण संख्या को प्रदर्शित नहीं करता है, न ही यह आपके बर्तन धोता है या आपके जूते चमकता है।


4
यहां चर्चा की गई और वैश्विक साइट संकुल के pip list --localबीच अंतर करने के लिए भी हैvirtualenv
Ioannis Filippidis

1
अभी तक का सबसे अच्छा। यह संस्करणों को भी पुनः प्राप्त करता है।
एरिजमैन

pip listसबसे सरल और सबसे अच्छा है। यहां विकल्प और विवरण दिए गए हैं।
लेवी बागुले

86
  • में ipythonआप टाइप कर सकते हैं " importTab"।

  • मानक पायथन दुभाषिया में, आप " help('modules')" टाइप कर सकते हैं ।

  • कमांड-लाइन पर, आप उपयोग कर सकते हैं ।pydoc modules

  • एक स्क्रिप्ट में, कॉल करें pkgutil.iter_modules()


5
pkgutil.iter_modules()काम करता है, ऊपर दिए गए पाइप समाधान सभी पैकेजों को सूचीबद्ध नहीं करता है, बस पाइप के माध्यम से स्थापित होते हैं।
मेटाफ़र्ट

2
बहुत बढ़िया! मुझे लगता है कि उन्होंने प्रलेखन में सुधार किया है, क्योंकि सवाल पूछा गया था। pydoc मॉड्यूल स्पैम मॉड्यूल के डॉक्स में स्पैम की खोज करता है। अंतिम बिंदु आपको मॉड्यूल का उपयोग करने के लिए पर्याप्त जानकारी देता प्रतीत होता है। @metaperture क्या आप, कृपया एक उदाहरण दे सकते हैं कि आप सभी स्थानीय मॉड्यूल को कैसे सूचीबद्ध करते हैं ( plutil.iter_modules () द्वारा मदद ('मॉड्यूल') द्वारा स्टालिब की विशाल सूची नहीं ।
लेओ लेपोल्ड हर्ट्ज '29

2
@ LéoLéopoldHertz इस स्निपेट का प्रयास करें 준영: python -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]'। यह सभी मॉड्यूल नामों को एक बहुत बड़ी पायथन सूची के रूप में डंप करना चाहिए। x[1]बिट द्वारा उत्पन्न tuples के मॉड्यूल का नाम बाहर बांधना करने के लिए प्रयोग किया जाता है pkgutil.iter_modules()
फिलिप कॉनराड

76

मैं अभी इसका उपयोग वर्तमान में उपयोग किए गए मॉड्यूल को देखने के लिए करता हूं:

import sys as s
s.modules.keys()

जो आपके अजगर पर चलने वाले सभी मॉड्यूल दिखाता है।

सभी अंतर्निहित मॉड्यूल उपयोग के लिए:

s.modules

जो सभी मॉड्यूल और आयात वस्तुओं से युक्त एक तानाशाही है।


2
# आयात करने के बाद आप sys "import sys as s" पर प्रिंट कर सकते हैं: प्रिंट sys.modules.keys ()
Dan Evans

यह निश्चित नहीं है कि मेरी पोस्ट को क्यों संपादित किया गया था, लेकिन पहले पोस्ट में गलतियों को सुधारने के लिए मैंने जो जानकारी पोस्ट की थी, उसका उपयोग करने के लिए धन्यवाद। यदि आप सहायता () बनाम सहायता ('') का उपयोग करते हैं, तो आप त्रुटियां वापस करेंगे। यह dir ('') और sys ('') आदि के लिए भी जाता है। आशा है कि यह मदद करता है और हटा नहीं है।
दान इवांस

मेरी पिछली पोस्ट को नजरअंदाज करें, इस पोस्ट को संपादित नहीं किया गया था। मैं यहां पाए गए एक समान पोस्ट के बारे में सोच रहा था: stackoverflow.com/questions/139180/… भ्रम के लिए क्षमा करें।
दान इवांस

7
Upvoted, क्योंकि यह एकमात्र तरीका है जो विवश प्रणालियों पर काम करता है जो न तो स्थापित है pydocऔर न ही pip(मेरे मामले में एक NAS)।
थॉमस

1
थॉमस से सहमत थे। मैं repl.it का उपयोग कर रहा हूं, उदाहरण के लिए, जो पर्यावरण का एक विवश प्रकार भी है। help('modules')सिर्फ मेरे लिए प्रतिक्रिया के बिना लटका हुआ है। लेकिन यह दृष्टिकोण sysपूरी तरह से काम करता है
सेर्गेई कोलोडियाज़नी

63

सामान्य खोल में बस का उपयोग करें

pydoc modules

ऐसा प्रतीत होता है कि उपरोक्त केवल platforms निक्स प्लेटफॉर्म पर ही काम करता है। किसी भी स्थिति में, मैंने स्क्रिप्ट को पाया और चलाया, कमांड को निम्नानुसार: c: \ bin \ pythos_2.7 \ lib \ pydoc.py मॉड्यूल - उस सूची को बनाने में हमेशा के लिए लिया गया, स्वरूप बेकार है, और यह स्थापित संस्करण को छोड़ देता है नंबर। मैं सफल हो जाऊंगा।
डेविड ए। ग्रे

2
@ DavidA.Gray ने पायथन 3 के साथ विंडोज मशीन पर बस यह कोशिश की, और यह वास्तव में काम करता है। अजगर खिड़कियों लांचर का उपयोग करना py -m pydoc modulesआप cmd या पॉवर्सशेल में कर सकते हैं ।
वीकेके

pydoc modulesपायथन 3.6 के साथ विंडोज 10 में मेरे लिए काम नहीं किया, लेकिन @VKK संशोधन: py -m pydoc modulescmd / पॉवर्सशेल में काम करता है।
मार्टिन

41

पाइप 10 के रूप में, स्वीकृत उत्तर अब काम नहीं करेगा। विकास दल ने get_installed_distributionsदिनचर्या तक पहुंच को हटा दिया है। एक setuptoolsही काम करने के लिए एक वैकल्पिक कार्य है। यहाँ एक वैकल्पिक संस्करण है जो पाइप 10 के साथ काम करता है:

import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
     for i in installed_packages])
print(installed_packages_list)

कृपया मुझे बताएं कि क्या यह पाइप के पिछले संस्करणों में भी काम करेगा या नहीं।


2
मैं इस समाधान की खोज कर रहा हूं और अपने मस्तिष्क को pkg_resources का पता लगाने की कोशिश कर रहा हूं। अगर मैं इसे एक से अधिक बार बढ़ा सकता हूं। धन्यवाद, @Big_Al_Tx! अपडेट: सिवाय .... जब मैं अपने वर्चुअल वातावरण में 'पाइप फ्रीज' करता हूं और इसकी तुलना इसके आउटपुट से करता हूं, तो ऐसे पैकेज होते हैं जो गायब होते हैं। क्यों / क्या हो सकता है पर कोई विचार?
नंबरवन

@numberwhun - मुझे खुशी है कि यह आपके लिए काम कर रहा है। मुझे खेद है, लेकिन मेरे पास विसंगति का जवाब नहीं है pip freeze; इस विषय पर मेरे ज्ञान की गहराई सीमित है। जब मैंने स्वीकार जवाब मेरे लिए काम नहीं किया, तो मैंने समाधान के लिए अपना रास्ता छीन लिया और मैंने इसे संबंधित उत्तर के साथ संयोजित करने की कोशिश की setuptoolsऔर इसे काम करने के लिए मिला।
20_ पर Big_Al_Tx

github.com/pypa/pip/issues/5243 - विकास टीम की बात हटा दी गई है get_installed_distributions routine
ब्ल्यू

@ bl79 - मुझे लगता है कि वह सटीक जगह है जहां मुझे संदर्भ मिला है setuptools
Big_Al_Tx

@Big_Al_Tx: ठीक है, मैं सेटप्टूल ऑप्शन के आसपास काम करता हूं (जो कि मेरी जरूरतों के लिए बाधित था) यह करने की जरूरत है .... याय !!
संख्या

26

यदि हमें पायथन शेल में स्थापित पैकेजों को सूचीबद्ध करने की आवश्यकता है, तो हम helpनिम्नानुसार कमांड का उपयोग कर सकते हैं

>>help('modules package')

22

मैं आमतौर pip listपर पैकेजों की एक सूची (संस्करण के साथ) प्राप्त करने के लिए उपयोग करता हूं ।

यह आभासी वातावरण में भी काम करता है। यह दिखाने के लिए कि केवल आभासी वातावरण (वैश्विक पैकेज नहीं) में क्या स्थापित है, का उपयोग करें pip list --local

यहांpip list कई अच्छे उदाहरणों के साथ सभी उपलब्ध विकल्पों को दर्शाने वाले दस्तावेज़ हैं।


13

Pkgutil.iter_modules का उपयोग करके बहुत सरल खोज

from pkgutil import iter_modules
a=iter_modules()
while True:
    try: x=a.next()
    except: break
    if 'searchstr' in x[1]: print x[1]

लूप के बजाय उपयोग करने का कोई कारण है? मैंने प्रयोग करके लिखा for m in iter_modules()और यह काम भी किया।
जोआओ पोंटे

13

विंडोज़ पर, इसे cmd में दर्ज करें

c:\python\libs>python -m pip freeze

इसने मेरे लिए काम किया: python3 -m pip freeze - अजगर 3.5.3 के लिए।
dpminusa

यह अच्छी तरह से काम करता है और आपको
लिबास

12

मैं ओएस एक्स पर एक कस्टम स्थापित अजगर 2.7 में भाग गया। इसे स्थापित मॉड्यूल की मदद के लिए X11 की आवश्यकता थी (दोनों मदद और पायडॉक का उपयोग करके)।

X11 को स्थापित किए बिना सभी मॉड्यूलों को सूचीबद्ध करने में सक्षम होने के लिए मैंने http- सर्वर के रूप में pydoc चलाया, अर्थात:

pydoc -p 12345

फिर http://localhost:12345/सभी मॉड्यूल देखने के लिए सफारी को निर्देशित करना संभव है ।



12

ये सहायता करेगा

टर्मिनल या आईपीथॉन में, टाइप करें:

help('modules')

फिर

In [1]: import                      #import press-TAB
Display all 631 possibilities? (y or n)
ANSI                   audiodev               markupbase
AptUrl                 audioop                markupsafe
ArgImagePlugin         avahi                  marshal
BaseHTTPServer         axi                    math
Bastion                base64                 md5
BdfFontFile            bdb                    mhlib
BmpImagePlugin         binascii               mimetools
BufrStubImagePlugin    binhex                 mimetypes
CDDB                   bisect                 mimify
CDROM                  bonobo                 mmap
CGIHTTPServer          brlapi                 mmkeys
Canvas                 bsddb                  modulefinder
CommandNotFound        butterfly              multifile
ConfigParser           bz2                    multiprocessing
ContainerIO            cPickle                musicbrainz2
Cookie                 cProfile               mutagen
Crypto                 cStringIO              mutex
CurImagePlugin         cairo                  mx
DLFCN                  calendar               netrc
DcxImagePlugin         cdrom                  new
Dialog                 cgi                    nis
DiscID                 cgitb                  nntplib
DistUpgrade            checkbox               ntpath

यह स्वीकृत उत्तर होना चाहिए! एक पंक्ति :)
लगभग

9

यह समाधान मॉड्यूल पर आधारित प्राथमिक है importlibऔर pkgutilसीपीथॉन 3.4 और सीपीथॉन 3.5 के साथ काम करता है, लेकिन सीपीथॉन 2 के लिए कोई समर्थन नहीं है।


व्याख्या

  1. sys.builtin_module_names- सभी अंतर्निहित मॉड्यूल के नाम (मेरे जवाब यहां देखें )
  2. pkgutil.iter_modules() - सभी उपलब्ध मॉड्यूल के बारे में जानकारी देता है
  3. importlib.util.find_spec() - आयात मॉड्यूल के बारे में एक जानकारी देता है, अगर मौजूद है
  4. BuiltinImporter- अंतर्निहित मॉड्यूल के लिए एक आयातक ( डॉक्स )
  5. SourceFileLoader- मानक पायथन मॉड्यूल के लिए एक आयातक (डिफ़ॉल्ट रूप से एक्सटेंशन * .py) है ( डॉक्स )
  6. ExtensionFileLoader- साझा पुस्तकालय के रूप में मॉड्यूल के लिए एक आयातक (सी या सी ++ पर लिखा गया है)

पूर्ण कोड

import sys
import os
import shutil
import pkgutil
import importlib
import collections

if sys.version_info.major == 2:
    raise NotImplementedError('CPython 2 is not supported yet')


def main():

    # name this file (module)
    this_module_name = os.path.basename(__file__).rsplit('.')[0]

    # dict for loaders with their modules
    loaders = collections.OrderedDict()

    # names`s of build-in modules
    for module_name in sys.builtin_module_names:

        # find an information about a module by name
        module = importlib.util.find_spec(module_name)

        # add a key about a loader in the dict, if not exists yet
        if module.loader not in loaders:
            loaders[module.loader] = []

        # add a name and a location about imported module in the dict
        loaders[module.loader].append((module.name, module.origin))

    # all available non-build-in modules
    for module_name in pkgutil.iter_modules():

        # ignore this module
        if this_module_name == module_name[1]:
            continue

        # find an information about a module by name
        module = importlib.util.find_spec(module_name[1])

        # add a key about a loader in the dict, if not exists yet
        loader = type(module.loader)
        if loader not in loaders:
            loaders[loader] = []

        # add a name and a location about imported module in the dict
        loaders[loader].append((module.name, module.origin))

    # pretty print
    line = '-' * shutil.get_terminal_size().columns
    for loader, modules in loaders.items():
        print('{0}\n{1}: {2}\n{0}'.format(line, len(modules), loader))
        for module in modules:
            print('{0:30} | {1}'.format(module[0], module[1]))


if __name__ == '__main__':
    main()

प्रयोग

CPython3.5 के लिए (काट दिया गया)

$ python3.5 python_modules_info.py 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
30: <class '_frozen_importlib.BuiltinImporter'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ast                           | built-in
_codecs                        | built-in
_collections                   | built-in
_functools                     | built-in
_imp                           | None
_io                            | built-in
_locale                        | built-in
_operator                      | built-in
_signal                        | built-in
_sre                           | built-in
_stat                          | built-in
_string                        | built-in
_symtable                      | built-in
_thread                        | built-in
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
227: <class '_frozen_importlib_external.SourceFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__future__                     | /usr/local/lib/python3.5/__future__.py
_bootlocale                    | /usr/local/lib/python3.5/_bootlocale.py
_collections_abc               | /usr/local/lib/python3.5/_collections_abc.py
_compat_pickle                 | /usr/local/lib/python3.5/_compat_pickle.py
_compression                   | /usr/local/lib/python3.5/_compression.py
_dummy_thread                  | /usr/local/lib/python3.5/_dummy_thread.py
_markupbase                    | /usr/local/lib/python3.5/_markupbase.py
_osx_support                   | /usr/local/lib/python3.5/_osx_support.py
_pydecimal                     | /usr/local/lib/python3.5/_pydecimal.py
_pyio                          | /usr/local/lib/python3.5/_pyio.py
_sitebuiltins                  | /usr/local/lib/python3.5/_sitebuiltins.py
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
64: <class '_frozen_importlib_external.ExtensionFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_bisect                        | /usr/local/lib/python3.5/lib-dynload/_bisect.cpython-35m-x86_64-linux-gnu.so
_bz2                           | /usr/local/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so
_codecs_cn                     | /usr/local/lib/python3.5/lib-dynload/_codecs_cn.cpython-35m-x86_64-linux-gnu.so
_codecs_hk                     | /usr/local/lib/python3.5/lib-dynload/_codecs_hk.cpython-35m-x86_64-linux-gnu.so
_codecs_iso2022                | /usr/local/lib/python3.5/lib-dynload/_codecs_iso2022.cpython-35m-x86_64-linux-gnu.so
(****************************truncated*******************************)

CPython3.4 के लिए (काट दिया गया)

$ python3.4 python_modules_info.py
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
54: <class '_frozen_importlib.BuiltinImporter'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ast                           | built-in
_bisect                        | built-in
_codecs                        | built-in
_collections                   | built-in
_datetime                      | built-in
_elementtree                   | built-in
_functools                     | built-in
_heapq                         | built-in
_imp                           | None
_io                            | built-in
_locale                        | built-in
_md5                           | built-in
_operator                      | built-in
_pickle                        | built-in
_posixsubprocess               | built-in
_random                        | built-in
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
246: <class '_frozen_importlib.SourceFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__future__                     | /usr/lib/python3.4/__future__.py
_bootlocale                    | /usr/lib/python3.4/_bootlocale.py
_collections_abc               | /usr/lib/python3.4/_collections_abc.py
_compat_pickle                 | /usr/lib/python3.4/_compat_pickle.py
_dummy_thread                  | /usr/lib/python3.4/_dummy_thread.py
_markupbase                    | /usr/lib/python3.4/_markupbase.py
_osx_support                   | /usr/lib/python3.4/_osx_support.py
_pyio                          | /usr/lib/python3.4/_pyio.py
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
44: <class '_frozen_importlib.ExtensionFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_bz2                           | /usr/lib/python3.4/lib-dynload/_bz2.cpython-34m-x86_64-linux-gnu.so
_codecs_cn                     | /usr/lib/python3.4/lib-dynload/_codecs_cn.cpython-34m-x86_64-linux-gnu.so
_codecs_hk                     | /usr/lib/python3.4/lib-dynload/_codecs_hk.cpython-34m-x86_64-linux-gnu.so
_codecs_iso2022                | /usr/lib/python3.4/lib-dynload/_codecs_iso2022.cpython-34m-x86_64-linux-gnu.so
_codecs_jp                     | /usr/lib/python3.4/lib-dynload/_codecs_jp.cpython-34m-x86_64-linux-gnu.so
_codecs_kr                     | /usr/lib/python3.4/lib-dynload/_codecs_kr.cpython-34m-x86_64-linux-gnu.so
_codecs_tw                     | /usr/lib/python3.4/lib-dynload/_codecs_tw.cpython-34m-x86_64-linux-gnu.so
_crypt                         | /usr/lib/python3.4/lib-dynload/_crypt.cpython-34m-x86_64-linux-gnu.so
(****************************truncated*******************************)

क्या आप कृपया एडम के दृष्टिकोण से अपने दृष्टिकोण की तुलना यहां करें stackoverflow.com/a/23885252/54964
Léo Léopold Hertz

@ Léo Léopold Hertz, आपको इसकी आवश्यकता क्यों है?
PADYMKO

यह समझने के लिए कि आदम के दृष्टिकोण की तुलना में आपका दृष्टिकोण कितना बेहतर है / बेहतर है।
लेओ लेपोल्ड हर्ट्ज़ '

1
@ लेओ लेपोल्ड हर्ट्ज़। एक संक्षिप्त जवाब: इसे अपने आप को एक उत्पादन में आज़माएं और अपने आप निष्कर्ष निकालें। दीर्घ उत्तर: एडम का दृष्टिकोण pip- पैकेज प्रबंधन प्रणाली पर आधारित है, जिसका उपयोग पायथन में लिखे गए सॉफ्टवेयर पैकेजों को स्थापित करने और प्रबंधित करने के लिए किया जाता है और परिणामस्वरूप pip.get_installed_distributions()पाइप के साथ स्थापित मॉड्यूल लौटाता है। मेरा जवाब पूरी तरह से पायथन के मानक पुस्तकालय पर आधारित है और आयात के लिए उपलब्ध सभी मॉड्यूल को कवर करता है। मेरा जवाब एक सबसे बड़ी कमी
सीपी

1
@ Léo Léopold Hertz आप गलत हैं, यह करता है। मैंने अपने कंप्यूटर पर इसका परीक्षण किया। मेरे उत्तर में विशेष अर्थ समाहित है **truncated**, जहां एक आउटपुट को काट दिया जाता है। शायद आप सावधान न हों, लेकिन अगर ऐसा नहीं होता है, तो मुझे अपने सिस्टम और पायथन कार्यान्वयन के बारे में जानकारी भेजने के लिए, मैं इसे ठीक करने के लिए अतिरिक्त शोध करूंगा।
PADYMKO

9

चेतावनी: एडम मेटन पाइप> 10.0 में इस उपयोग को हतोत्साहित करता है। इसके अलावा, नीचे @ sinoroc की टिप्पणी पढ़ें

यह एडम मेटन के उत्तर (स्वीकृत एक) से प्रेरित था :

import tabulate
try:
  from pip import get_installed_distributions
except:
  from pip._internal.utils.misc import get_installed_distributions

tabpackages = []
for _, package in sorted([('%s %s' % (i.location, i.key), i) for i in get_installed_distributions()]):
  tabpackages.append([package.location, package.key, package.version])

print(tabulate.tabulate(tabpackages))

जो तब के रूप में एक टेबल प्रिंट करता है

19:33 pi@rpi-v3 [iot-wifi-2] ~/python$ python installed_packages.py
-------------------------------------------  --------------  ------
/home/pi/.local/lib/python2.7/site-packages  enum-compat     0.0.2
/home/pi/.local/lib/python2.7/site-packages  enum34          1.1.6
/home/pi/.local/lib/python2.7/site-packages  pexpect         4.2.1
/home/pi/.local/lib/python2.7/site-packages  ptyprocess      0.5.2
/home/pi/.local/lib/python2.7/site-packages  pygatt          3.2.0
/home/pi/.local/lib/python2.7/site-packages  pyserial        3.4
/usr/local/lib/python2.7/dist-packages       bluepy          1.1.1
/usr/local/lib/python2.7/dist-packages       click           6.7
/usr/local/lib/python2.7/dist-packages       click-datetime  0.2
/usr/local/lib/python2.7/dist-packages       construct       2.8.21
/usr/local/lib/python2.7/dist-packages       pyaudio         0.2.11
/usr/local/lib/python2.7/dist-packages       tabulate        0.8.2
-------------------------------------------  --------------  ------

जो आपको तब आसानी से समझ में आ जाता है कि आपने किन पैकेजों को बिना और उसके साथ इंस्टॉल किया है sudo


एक तरफ ध्यान दें: मैंने देखा है कि जब मैं एक बार के माध्यम से sudoऔर बिना एक बार एक पैकेट स्थापित करता हूं , तो एक पूर्वता लेता है ताकि दूसरे को सूचीबद्ध नहीं किया जा सके (केवल एक स्थान दिखाया गया है)। मेरा मानना ​​है कि स्थानीय निर्देशिका में केवल एक ही सूचीबद्ध है। इसमें सुधार किया जा सकता था।


1
नहीं। यह अनुशंसित नहीं है, यहां देखें: pip.pypa.io/en/stable/user_guide/#use-pip-from-your-program
sinoroc

1
@sinoroc इसे इंगित करने के लिए धन्यवाद। अंक 1 से 3 इस समाधान पर लागू नहीं होते हैं, क्योंकि इस स्क्रिप्ट का pipएक बार उपयोग करने और फिर बाहर निकलने का एकमात्र उद्देश्य है । यह एक समस्या से अधिक प्रतीत होता है कि व्यवहार बदल सकता है।
डेनियल एफ

सहमत, जिन कारणों से कोई सार्वजनिक एपीआई नहीं है, वे इस विशेष कोड के कोड पर लागू नहीं होते हैं। लेकिन चूंकि पाइप एक सार्वजनिक एपीआई की गारंटी देने के लिए बाध्य नहीं है, इसलिए यह बाद के रिलीज में अपने आंतरिक एपीआई, कोड संरचना, आदि को बदलने के लिए स्वतंत्र है, जैसे कि यह पहले ही किया था। यही कारण है कि इस कोड में पिछले आंतरिक कोड पुनर्गठन को पकड़ने के लिए एक प्रयास / छोड़कर है, जो यह स्पष्ट करने के लिए था कि आंतरिक एपीआई सार्वजनिक नहीं हैं आंतरिक एपीआई हैं ( _internal)। सब सब में, यह स्पष्ट रूप से काम करता है लेकिन बुरा अभ्यास है। बेहतर विकल्प हैं, कुछ इस प्रश्न के अन्य उत्तरों में हैं।
सिनोरोक

1
यदि "पाइप" मॉड्यूल नहीं है तो यह स्क्रिप्ट काम नहीं करेगी।
अलेक्जेंडर स्टोह्र


6

यदि आपके पास एनाकोंडा पायथन वितरण स्थापित है, तो आप इसका उपयोग भी कर सकते हैं

$conda list

ऊपर वर्णित समाधानों के अतिरिक्त।


आप इस लाइन को कहां / कैसे चलाते हैं?
HuckIt

यदि आप अपने UNIX / Mac OS X मशीन पर हैं, तो अपना टर्मिनल खोलें और बस टाइप करें conda install, यह काम करना चाहिए :)
श्रेयस

मैं विंडोज 7 मशीन पर हूं। मुझे यह वास्तव में मेरे रास्ते में मिला, लेकिन AppData \ Local \ Continuum \ Anaconda \ Scripts में conda.exe है।
HuckIt

6
  1. सभी उपलब्ध मॉड्यूल प्राप्त करने के लिए, दौड़ें sys.modules
  2. सभी स्थापित मॉड्यूल प्राप्त करने के लिए (पढ़ें: द्वारा स्थापित pip), आप देख सकते हैंpip.get_installed_distributions()

दूसरे उद्देश्य के लिए, उदाहरण कोड:

import pip
for package in pip.get_installed_distributions():
    name = package.project_name # SQLAlchemy, Django, Flask-OAuthlib
    key = package.key # sqlalchemy, django, flask-oauthlib
    module_name = package._get_metadata("top_level.txt") # sqlalchemy, django, flask_oauthlib
    location = package.location # virtualenv lib directory etc.
    version = package.version # version number

कमांड sys.modules नवीनतम OSX के पायथन में काम नहीं करता है। NameError: नाम 'सिस्टम' परिभाषित नहीं है
लेओ लेपोल्ड हर्ट्ज़ '

@ मासी क्या आपका मतलब है /usr/bin/pythonया python.org से आया है ? पूर्व के लिए, मैं sys.modulesएक समस्या के बिना उपयोग कर सकता हूं ।
यूल

मेरा मतलब है / usr / बिन / अजगर
लेओ लेपोल्ड हर्ट्ज़ '

@ मासी को यकीन नहीं है कि आप अभी भी इस समस्या में दिलचस्पी रखते हैं। जाहिरा तौर पर आप के system.modulesबजाय उपयोग कर रहे हैं sys.modules
17

जबरदस्त हंसी। मेरी गलती यह थी कि मैंने मूल रूप से sys -package आयात नहीं किया था। इसलिए आयात sys के बजाय चल रहा है ; sys.modules अपेक्षा के अनुरूप काम करते हैं।
लीओ लेपोल्ड हर्ट्ज़ '

6

पिप 20 जैसे हाल के संस्करण के लिए

अपने अजगर संपादक या IPython में निम्नलिखित चलाएँ

import pkg_resources; 
installed_packages = {d.project_name: d.version for d in pkg_resources.working_set}
print(installed_packages)

अन्य उत्तर पढ़ें और इस कॉम्बो को एक साथ खींचा, जो पायथन के अंदर सबसे तेज और आसान है


4

पाइप फ़्रीज़ यह सभी पैकेज खोजने के लिए करता है, हालांकि कोई व्यक्ति उन सभी रास्तों को सूचीबद्ध करने के लिए निम्नलिखित कमांड लिख सकता है जहां अजगर पैकेज हैं।

>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

4

एक बिल्ली की त्वचा के कई तरीके हैं।

  • सबसे सरल तरीका pydocसीधे शेल से फ़ंक्शन का उपयोग करना है:
    pydoc modules

  • लेकिन अधिक जानकारी के लिए पाइप-डेट नामक टूल का उपयोग करें जो आपको इंस्टॉलेशन डेट भी बताता है।
    pip install pip-date


यहां छवि विवरण दर्ज करें


3

कई विचार हैं, शुरू में मैं इन दोनों पर विचार कर रहा हूं:

रंज

विपक्ष: हमेशा स्थापित नहीं

मदद ( 'मॉड्यूल')

विपक्ष: कंसोल के लिए उत्पादन; टूटे हुए मॉड्यूल के साथ (देखें ubuntu ...) सेगफॉल्ट कर सकते हैं

मुझे बुनियादी पुस्तकालयों का उपयोग करके एक आसान दृष्टिकोण की आवश्यकता है और पुराने अजगर 2.x के साथ संगत है

और मुझे प्रकाश दिखाई देता है: listmodules.py

2.5 में प्रलेखन स्रोत निर्देशिका में छिपा एक छोटी स्क्रिप्ट है जो पायथन इंस्टॉलेशन के लिए सभी उपलब्ध मॉड्यूल को सूचीबद्ध करती है।

पेशेवरों:

केवल छोटा सा भूत ,ys, ओएस, पुनः, समय का उपयोग करता है

पायथन 1.5.2 और नए पर चलाने के लिए डिज़ाइन किया गया

स्रोत कोड वास्तव में कॉम्पैक्ट है, इसलिए आप इसके साथ आसान छेड़छाड़ कर सकते हैं, उदाहरण के लिए छोटी गाड़ी मॉड्यूल की अपवाद सूची को पास करना (उन्हें आयात करने का प्रयास न करें)


3

मुझे AWS लैम्ब्डा में डिफ़ॉल्ट रूप से उपलब्ध पैकेज के विशिष्ट संस्करण को खोजने की आवश्यकता थी। मैंने इस पृष्ठ से विचारों के एक मैशप के साथ ऐसा किया। मैं इसे पोस्टरिटी के लिए शेयर कर रहा हूं।

import pkgutil

__version__ = '0.1.1'

def get_ver(name):
    try:
        return str(__import__(name).__version__)
    except:
        return None

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': [{
                   'path': m.module_finder.path,
                   'name': m.name,
                   'version': get_ver(m.name),
                 } for m in list(pkgutil.iter_modules())
                 #if m.module_finder.path == "/var/runtime" # Uncomment this if you only care about a certain path
                ],
    }

मुझे क्या पता चला है कि प्रदान की गई boto3 लाइब्रेरी तारीख से बाहर थी और यह मेरी गलती नहीं थी कि मेरा कोड विफल हो रहा था। मुझे बस अपने प्रोजेक्ट में boto3 और botocore जोड़ने की आवश्यकता थी। लेकिन इसके बिना मैं अपना सिर पीट रहा होता, यह सोचकर कि मेरा कोड खराब था।

{
  "statusCode": 200,
  "body": [
    {
      "path": "/var/task",
      "name": "lambda_function",
      "version": "0.1.1"
    },
    {
      "path": "/var/runtime",
      "name": "bootstrap",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "boto3",
      "version": "1.9.42"
    },
    {
      "path": "/var/runtime",
      "name": "botocore",
      "version": "1.12.42"
    },
    {
      "path": "/var/runtime",
      "name": "dateutil",
      "version": "2.7.5"
    },
    {
      "path": "/var/runtime",
      "name": "docutils",
      "version": "0.14"
    },
    {
      "path": "/var/runtime",
      "name": "jmespath",
      "version": "0.9.3"
    },
    {
      "path": "/var/runtime",
      "name": "lambda_runtime_client",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "lambda_runtime_exception",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "lambda_runtime_marshaller",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "s3transfer",
      "version": "0.1.13"
    },
    {
      "path": "/var/runtime",
      "name": "six",
      "version": "1.11.0"
    },
    {
      "path": "/var/runtime",
      "name": "test_bootstrap",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "test_lambda_runtime_client",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "test_lambda_runtime_marshaller",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "urllib3",
      "version": "1.24.1"
    },
    {
      "path": "/var/lang/lib/python3.7",
      "name": "__future__",
      "version": null
    },
...

मुझे जो पता चला वह भी आधिकारिक तौर पर प्रकाशित होने वाली चीज़ों से अलग था । इसे लिखते समय:

  • ऑपरेटिंग सिस्टम - अमेज़न लिनक्स
  • AMI - amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2
  • लिनक्स कर्नेल - 4.14.77-70.59.amzn1.x86_64
  • जावास्क्रिप्ट के लिए AWS SDK - 2.290.0 \
  • पायथन के लिए एसडीके (बोटो 3) - 3-1.74 बोटोकोर-1.10.74

1

स्थापना

pip install pkgutil

कोड

import pkgutil

for i in pkgutil.iter_modules(None): # returns a tuple (path, package_name, ispkg_flag)
    print(i[1]) #or you can append it to a list

नमूना आउटपुट:

multiprocessing
netrc
nntplib
ntpath
nturl2path
numbers
opcode
pickle
pickletools
pipes
pkgutil

1

यहां एक अजगर कोड समाधान है जो स्थापित मॉड्यूल की एक सूची वापस करेगा। एक संस्करण संख्याओं को शामिल करने के लिए कोड को आसानी से संशोधित कर सकता है।

import subprocess
import sys
from pprint import pprint

installed_packages = reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze']).decode('utf-8')
installed_packages = installed_packages.split('\r\n')
installed_packages = [pkg.split('==')[0] for pkg in installed_packages if pkg != '']
pprint(installed_packages)

-1

किसी pip listपायथन प्रोग्राम से कॉल करने के तरीके के बारे में सोचकर आप निम्नलिखित का उपयोग कर सकते हैं:

import pip
pip.main(['list])  # this will print all the packages

नहीं, यह अनुशंसित नहीं है, यहां देखें: pip.pypa.io/en/stable/user_guide/#use-pip-from-your-program
sinoroc

-10

खोल से

ls site-packages

यदि वह मददगार नहीं है, तो आप ऐसा कर सकते हैं।

import sys
import os
for p in sys.path:
    print os.listdir( p )

और देखें कि क्या उत्पादन होता है।


कौन सी साइट-पैकेज निर्देशिका? यह बेहतर कर सकता है: ls / usr / {स्थानीय /,} lib / अजगर $ (अजगर वी 2> & 1 | कटौती -d "" -f2 | कटौती -d -f1-2।) / साइट-संकुल
vezult

इसके अलावा यह कस्टम PYTHONPATH में निर्मित मॉड्यूल, या मॉड्यूल नहीं दिखाएगा, या सेटप्टूल "विकास मोड" आदि में स्थापित वाले हैं
डीएफ।

मेरा /us/local/lib/python2.5/site-packages खाली है, हालांकि मैंने मॉड्यूल स्थापित किए हैं।
लेओ लेपोल्ड हर्ट्ज़ o

14
इस खराब जवाब को नहीं हटाने के लिए कुदोस। यह समुदाय के लिए यह देखने में सक्षम है कि एक सामान्य उत्तर को गलत क्यों माना जाता है।
जेरेमी स्टीन

1
@JeremyStein एक बेहतर रणनीति (अधिक मददगार और शायद कम नुकसान पहुंचाने वाली) शायद यह बताने के लिए सवाल को संपादित करना होगा कि यह गलत क्यों है, एक बार इस टिप्पणी में समझाया गया है ...
काइल स्ट्रैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.