पायथन में सभी स्थापित पैकेज और उनके संस्करणों को कैसे सूचीबद्ध करें?


128

क्या सभी स्थापित पैकेजों और उनके संस्करणों को सूचीबद्ध करने के लिए पायथन में एक तरीका है?

मुझे पता है कि मैं अंदर जा सकता हूं python/Lib/site-packagesऔर देख सकता हूं कि क्या फाइलें और निर्देशिकाएं मौजूद हैं, लेकिन मुझे यह बहुत अजीब लगता है। क्या मैं कुछ है कि के समान है के लिए देख रहा हूँ npm listयानी NPM-ls


जवाबों:


196

यदि आपके पास पाइप इंस्टॉल है और आप देखना चाहते हैं कि आपके इंस्टॉलर टूल के साथ कौन से पैकेज इंस्टॉल किए गए हैं, तो आप इसे कॉल कर सकते हैं:

pip freeze

इसमें स्थापित पैकेजों के लिए संस्करण संख्याएं भी शामिल होंगी।

अपडेट करें

पाइप को उसी आउटपुट के रूप में अद्यतन करने के लिए अद्यतन किया गया है pip freeze:

pip list

ध्यान दें

इससे आउटपुट को pip listअलग तरीके से स्वरूपित किया जाता है, इसलिए यदि आपके पास कुछ शेल स्क्रिप्ट है जो आउटपुट (शायद संस्करण संख्या को हथियाने के लिए) पार्स करता है freezeऔर कॉल करने के लिए अपनी स्क्रिप्ट बदलना चाहता है list, तो आपको अपना पार्सिंग कोड बदलना होगा।


9
IMHO वे के pip listलिए एक उपनाम के रूप में प्रदान करना चाहिए pip freeze। लिखने के लिए अपनी सहज pip freeze > requirements.txt, लेकिन नहीं pip freeze
जसलोनन

3
वाह: बस पाइप के नवीनतम संस्करण के प्रलेखन में देखा गया है और ऐसा लगता है जैसे उन्होंने जोड़ा है pip list: pip-installer.org/en/latest/usage.html#pip-list - तो यह वास्तव में कुछ है जो पहले से ही आ रहा है!
jsalonen

51

help('modules') आपके लिए करना चाहिए।

IPython में:

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

5
यह आसान है! मैं हालांकि संस्करणों को देखना पसंद करूंगा।
१०:३२ पर

4
मुझे लगता है कि समस्या थेरेस कोई मानकीकृत संस्करण सहित का तरीका है ... कभी कभी अपने Package.version()या package.__version__या package.verया अन्य संभावनाओं के किसी भी संख्या
Joran बीस्ले

मुझे लगा कि अजगर का आदर्श वाक्य "यह करने का केवल एक ही तरीका है";)
एड रान्डेल

3
@EdRandall, नहीं - यह "ऐसा करने का एक स्पष्ट तरीका है"। वहाँ हमेशा एक स्पष्ट तरीका है। इसके अलावा, सटीक शब्द है: वहाँ एक होना चाहिए - और अधिमानतः इसे करने के लिए केवल एक - स्पष्ट तरीका। हालांकि यह तरीका पहली बार में स्पष्ट नहीं हो सकता जब तक कि आप डच न हों।
रोज़व

30

यदि आप अपने स्थापित अजगर वितरण के बारे में जानकारी प्राप्त करना चाहते हैं और इसके लिए अपने cmd कंसोल या टर्मिनल का उपयोग नहीं करना चाहते हैं, बल्कि अजगर कोड के माध्यम से, आप निम्न कोड (अजगर 3.4 के साथ परीक्षण) का उपयोग कर सकते हैं:

import pip #needed to use the pip functions
for i in pip.get_installed_distributions(local_only=True):
    print(i)

pip.get_installed_distributions(local_only=True)समारोह-कॉल एक iterable वापस आती है और क्योंकि के लिए लूप और प्रिंट समारोह तत्वों में निहित iterable बाहर मुद्रित कर रहे हैं नए लाइन वर्ण द्वारा अलग ( \n)। परिणाम (आपके स्थापित वितरण के आधार पर) कुछ इस तरह दिखेगा:

cycler 0.9.0
decorator 4.0.4
ipykernel 4.1.0
ipython 4.0.0
ipython-genutils 0.1.0
ipywidgets 4.0.3
Jinja2 2.8
jsonschema 2.5.1
jupyter 1.0.0
jupyter-client 4.1.1
#... and so on...

4
@ प्रोफ्यूमा की टिप्पणी पर विस्तार करने के लिए, पाइप 10 के साथ आपको उपयोग करना चाहिए: pkg_resources.working_set] में d के लिए आयात pkg_resources [प्रिंट (d.project_name)
Almenon

की स्थिति क्या है pkg_resources? AFAICR इसका हिस्सा है setuptools। नहीं है pip। क्या हम सुरक्षित रूप से मान सकते हैं कि setuptoolsहमेशा केवल उपलब्ध होने के आधार पर ईएचएन उपलब्ध होगा pip?
प्रेडुमा

9

आप कोशिश कर सकते हैं: जर्दी

जर्दी स्थापित करने के लिए, प्रयास करें:

easy_install yolk

योक एक पायथन उपकरण है जो स्थापित पायथन पैकेजों के बारे में जानकारी प्राप्त करने और PyPI (पायथन पैकेज इंडेक्स) पर उपलब्ध पैकेज को क्वेरी करने के लिए है।

आप देख सकते हैं कि कौन से पैकेज सक्रिय, गैर-सक्रिय या विकास मोड में हैं और आपको दिखाते हैं कि आपके पास PyPI को क्वेरी करके नए संस्करण उपलब्ध हैं।


मैं आमतौर पर इस बिंदु पर इस कार्य के लिए पाइप का उपयोग करता हूं, लेकिन मेरे पास एक बहुत पुरानी परियोजना है जिसे मैं वितरित करने के लिए तैयार नहीं हूं, और मुझे याद आया कि इस तरह से एक उपकरण था। याद नहीं कर सका कि यह क्या कहा जाता है ... यह था!
मेथांत्ज

1
यह अजगर 3 का समर्थन नहीं करता (बस पाइप से स्थापित किया गया और रनटाइम त्रुटियां मिलीं)
ओहद कोहेन

9

पाइप के बाद के संस्करणों में इसे चलाने के लिए (परीक्षण किया गया pip==10.0.1) निम्नलिखित का उपयोग करें:

from pip._internal.operations.freeze import freeze
for requirement in freeze(local_only=True):
    print(requirement)

आंतरिकpydoc pip._internalhelp(pip._internal) की स्थिति क्या है ? मैं देखता हूं, लेकिन मैं इसे पाइप, .__ बिल्डिन्स_ आदि के तहत नहीं पहुंचा सकता । पाइप संदर्भ गाइड भी रिक्त है।
मोर्टेनब सिप

1
दुर्भाग्य से मुझे नहीं पता। मुझे यह पसंद नहीं है कि इसे बुलाया जाए _internal। ऐसा लगता है कि कार्यक्षमता आधिकारिक तौर पर उजागर नहीं हुई है। तो आपको इसे संभालना चाहिए!
11

8

कमांड लाइन से

python -c help('modules')

सभी मॉड्यूल को देखने के लिए और विशिष्ट मॉड्यूल के लिए इस्तेमाल किया जा सकता है

python -c help('os')

नीचे लिनक्स के लिए काम करेंगे

python -c "help('os')"

5
यह विंडोज़ पर काम करता है। Linux पर यह एरर फेंकता है:-bash: syntax error near unexpected token `('
AjayKumarBasuthkar

यह doesn't मॉड्यूल संस्करण देता है
Stepan Yakovenko

5

हाँ! आपको अपने अजगर पैकेज मैनेजर ( http://pypi.python.org/pypi/pip) के रूप में पाइप का उपयोग करना चाहिए )

पाइप स्थापित पैकेज के साथ, आप कर सकते हैं

pip freeze

और यह सभी स्थापित पैकेजों को सूचीबद्ध करेगा। आपको शायद virtualenv और virtualenvwrapper का भी उपयोग करना चाहिए । जब आप एक नया प्रोजेक्ट शुरू करते हैं, तो आप कर सकते हैं

mkvirtualenv my_new_project

और फिर (उस virtualenv के अंदर), करो

pip install all_your_stuff

इस तरह, आप कर सकते हैं workon my_new_projectऔर फिरpip freeze उस virtualenv / प्रोजेक्ट के लिए कौन से पैकेज स्थापित किए गए हैं।

उदाहरण के लिए:

  ~  mkvirtualenv yo_dude
New python executable in yo_dude/bin/python
Installing setuptools............done.
Installing pip...............done.
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/get_env_details

(yo_dude)➜  ~  pip install django
Downloading/unpacking django
  Downloading Django-1.4.1.tar.gz (7.7Mb): 7.7Mb downloaded
  Running setup.py egg_info for package django

Installing collected packages: django
  Running setup.py install for django
    changing mode of build/scripts-2.7/django-admin.py from 644 to 755

    changing mode of /Users/aaylward/dev/virtualenvs/yo_dude/bin/django-admin.py to 755
Successfully installed django
Cleaning up...

(yo_dude)➜  ~  pip freeze
Django==1.4.1
wsgiref==0.1.2

(yo_dude)➜  ~  

या यदि आपके पास एक आवश्यकताओं के साथ एक अजगर पैकेज है। ज़िप फ़ाइल,

mkvirtualenv my_awesome_project
pip install -r requirements.pip
pip freeze

चाल चलेगा


हाँ, मैं कुछ समय के लिए वास्तव में virtualenv का उपयोग कर रहा हूँ। मुझे अभी पता नहीं है कि मैंने यह कैसे पता लगाया कि मैं pipइस तरह से इसके साथ उपयोग कर सकता हूं !
१०:१२ पर

virtualenvवैश्विक साइट पैकेज के बारे में , आपको तब उपयोग करने की आवश्यकता होती है pip list --local
Ioannis Filippidis

@ जॉन्नेक्स आपको कभी भी वैश्विक साइट पैकेज का उपयोग नहीं करना चाहिए!
अंडब्रेड ने

वैश्विक साइट संकुल का उपयोग करना बहुत उपयोगी है। यदि ऐसा नहीं होता, तो विकल्प बिल्कुल भी मौजूद नहीं होता virtualenv। मुझे उनके उपयोग न करने के किसी भी कारण के बारे में पता नहीं है, और कोई भी virtualenvआपको पसंद करने पर प्रतिबंधित करने से रोकता है ।
Ioannis Filippidis

उनका उपयोग न करने का एक बड़ा कारण यह है कि जब आप अपने ऐप या प्रोग्राम को वितरित या तैनात करते हैं, तो अन्य लोगों / सर्वरों के पास आपके वैश्विक साइट पैकेज नहीं होंगे। यदि आप ऐप का उपयोग करने वाले एकमात्र व्यक्ति हैं, तो आप जो चाहें करें।
एंडब्रेड ने

5

मेरा स्वीकार कर लेना:

#!/usr/bin/env python3

import pkg_resources

dists = [str(d).replace(" ","==") for d in pkg_resources.working_set]
for i in dists:
    print(i)

2

यहाँ PYTHONPATHअपने अजगर कामों के निरपेक्ष पथ के बजाय इसका उपयोग करने का एक तरीका है :

for d in `echo "${PYTHONPATH}" | tr ':' '\n'`; do ls "${d}"; done

[ 10:43 Jonathan@MacBookPro-2 ~/xCode/Projects/Python for iOS/trunk/Python for iOS/Python for iOS ]$ for d in `echo "$PYTHONPATH" | tr ':' '\n'`; do ls "${d}"; done
libpython2.7.dylib pkgconfig          python2.7
BaseHTTPServer.py      _pyio.pyc              cgitb.pyo              doctest.pyo            htmlentitydefs.pyc     mimetools.pyc          plat-mac               runpy.py               stringold.pyc          traceback.pyo
BaseHTTPServer.pyc     _pyio.pyo              chunk.py               dumbdbm.py             htmlentitydefs.pyo     mimetools.pyo          platform.py            runpy.pyc              stringold.pyo          tty.py
BaseHTTPServer.pyo     _strptime.py           chunk.pyc              dumbdbm.pyc            htmllib.py             mimetypes.py           platform.pyc           runpy.pyo              stringprep.py          tty.pyc
Bastion.py             _strptime.pyc          chunk.pyo              dumbdbm.pyo            htmllib.pyc            mimetypes.pyc          platform.pyo           sched.py               stringprep.pyc         tty.pyo
Bastion.pyc            _strptime.pyo          cmd.py
....


1

यदि यह अजगर के भीतर से चलाने के लिए आवश्यक है, तो आप बस उपप्रकार का आह्वान कर सकते हैं

from subprocess import PIPE, Popen

pip_process = Popen(["pip freeze"], stdout=PIPE,
                   stderr=PIPE, shell=True)
stdout, stderr = pip_process.communicate()
print(stdout.decode("utf-8"))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.