मैं पायथन मॉड्यूल की एक सूची प्राप्त करना चाहूंगा, जो कि मेरे पायथन इंस्टॉलेशन (UNIX सर्वर) में हैं।
आप अपने कंप्यूटर में पायथन मॉड्यूल की सूची कैसे प्राप्त कर सकते हैं?
मैं पायथन मॉड्यूल की एक सूची प्राप्त करना चाहूंगा, जो कि मेरे पायथन इंस्टॉलेशन (UNIX सर्वर) में हैं।
आप अपने कंप्यूटर में पायथन मॉड्यूल की सूची कैसे प्राप्त कर सकते हैं?
जवाबों:
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
फ़ाइल।
मुझे प्रलेखन में इस मुद्दे का कोई संदर्भ नहीं मिला। शायद मैं इसके लिए एक बग खोल दूंगा।
import pkg_resources; installed_packages = [(d.project_name, d.version) for d in pkg_resources.working_set]
AttributeError: module 'pip' has no attribute 'get_installed_distributions'
।
help('modules')
पायथन शेल / प्रॉम्प्ट में।
pydoc modules
काम करता है। आपको इसे उत्तर के रूप में प्रस्तुत करना चाहिए।
python -c 'help("modules")'
अब, इन तरीकों को मैंने खुद आज़माया, और मुझे वही मिला, जो विज्ञापित किया गया था: सभी मॉड्यूल।
काश, वास्तव में आप 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।
पाइप संस्करण 1.3 के बाद से, आपको इसकी पहुँच मिल गई है:
pip list
जो कि "पिप फ्रीज़" के लिए सिंटैक्टिक शुगर लगती है। यह आपके इंस्टालेशन या वर्चुअनव के सभी मॉड्यूलों को सूचीबद्ध करेगा, साथ ही उनके संस्करण संख्याओं के साथ। दुर्भाग्य से यह किसी भी मॉड्यूल की वर्तमान संस्करण संख्या को प्रदर्शित नहीं करता है, न ही यह आपके बर्तन धोता है या आपके जूते चमकता है।
में ipython
आप टाइप कर सकते हैं " import
Tab"।
मानक पायथन दुभाषिया में, आप " help('modules')
" टाइप कर सकते हैं ।
कमांड-लाइन पर, आप उपयोग कर सकते हैं ।pydoc
modules
एक स्क्रिप्ट में, कॉल करें pkgutil.iter_modules()
।
pkgutil.iter_modules()
काम करता है, ऊपर दिए गए पाइप समाधान सभी पैकेजों को सूचीबद्ध नहीं करता है, बस पाइप के माध्यम से स्थापित होते हैं।
python -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]'
। यह सभी मॉड्यूल नामों को एक बहुत बड़ी पायथन सूची के रूप में डंप करना चाहिए। x[1]
बिट द्वारा उत्पन्न tuples के मॉड्यूल का नाम बाहर बांधना करने के लिए प्रयोग किया जाता है pkgutil.iter_modules()
।
मैं अभी इसका उपयोग वर्तमान में उपयोग किए गए मॉड्यूल को देखने के लिए करता हूं:
import sys as s
s.modules.keys()
जो आपके अजगर पर चलने वाले सभी मॉड्यूल दिखाता है।
सभी अंतर्निहित मॉड्यूल उपयोग के लिए:
s.modules
जो सभी मॉड्यूल और आयात वस्तुओं से युक्त एक तानाशाही है।
pydoc
और न ही pip
(मेरे मामले में एक NAS)।
help('modules')
सिर्फ मेरे लिए प्रतिक्रिया के बिना लटका हुआ है। लेकिन यह दृष्टिकोण sys
पूरी तरह से काम करता है
सामान्य खोल में बस का उपयोग करें
pydoc modules
py -m pydoc modules
आप cmd या पॉवर्सशेल में कर सकते हैं ।
pydoc modules
पायथन 3.6 के साथ विंडोज 10 में मेरे लिए काम नहीं किया, लेकिन @VKK संशोधन: py -m pydoc modules
cmd / पॉवर्सशेल में काम करता है।
पाइप 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)
कृपया मुझे बताएं कि क्या यह पाइप के पिछले संस्करणों में भी काम करेगा या नहीं।
pip freeze
; इस विषय पर मेरे ज्ञान की गहराई सीमित है। जब मैंने स्वीकार जवाब मेरे लिए काम नहीं किया, तो मैंने समाधान के लिए अपना रास्ता छीन लिया और मैंने इसे संबंधित उत्तर के साथ संयोजित करने की कोशिश की setuptools
और इसे काम करने के लिए मिला।
get_installed_distributions routine
।
setuptools
।
मैं आमतौर pip list
पर पैकेजों की एक सूची (संस्करण के साथ) प्राप्त करने के लिए उपयोग करता हूं ।
यह आभासी वातावरण में भी काम करता है। यह दिखाने के लिए कि केवल आभासी वातावरण (वैश्विक पैकेज नहीं) में क्या स्थापित है, का उपयोग करें pip list --local
।
यहांpip list
कई अच्छे उदाहरणों के साथ सभी उपलब्ध विकल्पों को दर्शाने वाले दस्तावेज़ हैं।
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()
और यह काम भी किया।
मैं ओएस एक्स पर एक कस्टम स्थापित अजगर 2.7 में भाग गया। इसे स्थापित मॉड्यूल की मदद के लिए X11 की आवश्यकता थी (दोनों मदद और पायडॉक का उपयोग करके)।
X11 को स्थापित किए बिना सभी मॉड्यूलों को सूचीबद्ध करने में सक्षम होने के लिए मैंने http- सर्वर के रूप में pydoc चलाया, अर्थात:
pydoc -p 12345
फिर http://localhost:12345/
सभी मॉड्यूल देखने के लिए सफारी को निर्देशित करना संभव है ।
इन्हें कोशिश करें
pip list
या
pip freeze
टर्मिनल या आईपीथॉन में, टाइप करें:
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
यह समाधान मॉड्यूल पर आधारित प्राथमिक है importlib
और pkgutil
सीपीथॉन 3.4 और सीपीथॉन 3.5 के साथ काम करता है, लेकिन सीपीथॉन 2 के लिए कोई समर्थन नहीं है।
व्याख्या
sys.builtin_module_names
- सभी अंतर्निहित मॉड्यूल के नाम (मेरे जवाब यहां देखें )pkgutil.iter_modules()
- सभी उपलब्ध मॉड्यूल के बारे में जानकारी देता हैimportlib.util.find_spec()
- आयात मॉड्यूल के बारे में एक जानकारी देता है, अगर मौजूद हैBuiltinImporter
- अंतर्निहित मॉड्यूल के लिए एक आयातक ( डॉक्स )SourceFileLoader
- मानक पायथन मॉड्यूल के लिए एक आयातक (डिफ़ॉल्ट रूप से एक्सटेंशन * .py) है ( डॉक्स )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*******************************)
pip
- पैकेज प्रबंधन प्रणाली पर आधारित है, जिसका उपयोग पायथन में लिखे गए सॉफ्टवेयर पैकेजों को स्थापित करने और प्रबंधित करने के लिए किया जाता है और परिणामस्वरूप pip.get_installed_distributions()
पाइप के साथ स्थापित मॉड्यूल लौटाता है। मेरा जवाब पूरी तरह से पायथन के मानक पुस्तकालय पर आधारित है और आयात के लिए उपलब्ध सभी मॉड्यूल को कवर करता है। मेरा जवाब एक सबसे बड़ी कमी
**truncated**
, जहां एक आउटपुट को काट दिया जाता है। शायद आप सावधान न हों, लेकिन अगर ऐसा नहीं होता है, तो मुझे अपने सिस्टम और पायथन कार्यान्वयन के बारे में जानकारी भेजने के लिए, मैं इसे ठीक करने के लिए अतिरिक्त शोध करूंगा।
चेतावनी: एडम मेटन पाइप> 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
और बिना एक बार एक पैकेट स्थापित करता हूं , तो एक पूर्वता लेता है ताकि दूसरे को सूचीबद्ध नहीं किया जा सके (केवल एक स्थान दिखाया गया है)। मेरा मानना है कि स्थानीय निर्देशिका में केवल एक ही सूचीबद्ध है। इसमें सुधार किया जा सकता था।
pip
एक बार उपयोग करने और फिर बाहर निकलने का एकमात्र उद्देश्य है । यह एक समस्या से अधिक प्रतीत होता है कि व्यवहार बदल सकता है।
_internal
)। सब सब में, यह स्पष्ट रूप से काम करता है लेकिन बुरा अभ्यास है। बेहतर विकल्प हैं, कुछ इस प्रश्न के अन्य उत्तरों में हैं।
एक तरफ से pip freeze
मैं अपने आभासी वातावरण में जर्दी स्थापित कर रहा हूं ।
यदि आपके पास एनाकोंडा पायथन वितरण स्थापित है, तो आप इसका उपयोग भी कर सकते हैं
$conda list
ऊपर वर्णित समाधानों के अतिरिक्त।
conda install
, यह काम करना चाहिए :)
sys.modules
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
/usr/bin/python
या python.org से आया है ? पूर्व के लिए, मैं sys.modules
एक समस्या के बिना उपयोग कर सकता हूं ।
system.modules
बजाय उपयोग कर रहे हैं sys.modules
।
अपने अजगर संपादक या IPython में निम्नलिखित चलाएँ
import pkg_resources;
installed_packages = {d.project_name: d.version for d in pkg_resources.working_set}
print(installed_packages)
अन्य उत्तर पढ़ें और इस कॉम्बो को एक साथ खींचा, जो पायथन के अंदर सबसे तेज और आसान है
पाइप फ़्रीज़ यह सभी पैकेज खोजने के लिए करता है, हालांकि कोई व्यक्ति उन सभी रास्तों को सूचीबद्ध करने के लिए निम्नलिखित कमांड लिख सकता है जहां अजगर पैकेज हैं।
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
कई विचार हैं, शुरू में मैं इन दोनों पर विचार कर रहा हूं:
रंज
विपक्ष: हमेशा स्थापित नहीं
मदद ( 'मॉड्यूल')
विपक्ष: कंसोल के लिए उत्पादन; टूटे हुए मॉड्यूल के साथ (देखें ubuntu ...) सेगफॉल्ट कर सकते हैं
मुझे बुनियादी पुस्तकालयों का उपयोग करके एक आसान दृष्टिकोण की आवश्यकता है और पुराने अजगर 2.x के साथ संगत है
और मुझे प्रकाश दिखाई देता है: listmodules.py
2.5 में प्रलेखन स्रोत निर्देशिका में छिपा एक छोटी स्क्रिप्ट है जो पायथन इंस्टॉलेशन के लिए सभी उपलब्ध मॉड्यूल को सूचीबद्ध करती है।
पेशेवरों:
केवल छोटा सा भूत ,ys, ओएस, पुनः, समय का उपयोग करता है
पायथन 1.5.2 और नए पर चलाने के लिए डिज़ाइन किया गया
स्रोत कोड वास्तव में कॉम्पैक्ट है, इसलिए आप इसके साथ आसान छेड़छाड़ कर सकते हैं, उदाहरण के लिए छोटी गाड़ी मॉड्यूल की अपवाद सूची को पास करना (उन्हें आयात करने का प्रयास न करें)
मुझे 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
स्थापना
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
यहां एक अजगर कोड समाधान है जो स्थापित मॉड्यूल की एक सूची वापस करेगा। एक संस्करण संख्याओं को शामिल करने के लिए कोड को आसानी से संशोधित कर सकता है।
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)
किसी pip list
पायथन प्रोग्राम से कॉल करने के तरीके के बारे में सोचकर आप निम्नलिखित का उपयोग कर सकते हैं:
import pip
pip.main(['list]) # this will print all the packages
खोल से
ls site-packages
यदि वह मददगार नहीं है, तो आप ऐसा कर सकते हैं।
import sys
import os
for p in sys.path:
print os.listdir( p )
और देखें कि क्या उत्पादन होता है।