Yüklü tüm paketler ve sürümleri Python'da nasıl listelenir?


Yanıtlar:


196

Eğer pip kurulumunuz varsa ve kurulum araçlarınız ile hangi paketlerin kurulu olduğunu görmek istiyorsanız, şunu diyebilirsiniz:

pip freeze

Ayrıca, kurulu paketlerin sürüm numaralarını da içerecektir.

Güncelleme

pip, şu pip freezeçağrı ile aynı çıktıyı üretecek şekilde güncellendi :

pip list

Not

Öğesinin çıktısı pip listfarklı biçimlendirilmiştir, bu nedenle çıktısını ayrıştıran (belki sürüm numarasını almak için) bir kabuk betiğiniz varsa freezeve betiğinizi çağırmak listiçin değiştirmek istiyorsanız, ayrıştırma kodunuzu değiştirmeniz gerekir.


9
IMHO pip listiçin bir takma ad olarak sağlamaları gerekir pip freeze. Yazması sezgisel pip freeze > requirements.txt, ama değil pip freeze.
jsalonen

3
WOW: Pip'in en son sürümünün belgelerine baktım ve ekledikleri gibi görünüyor pip list: pip-installer.org/en/latest/usage.html#pip-list - yani bu aslında zaten gelen bir şey!
jsalonen

51

help('modules') bunu sizin için yapmalı.

IPython'da:

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
Bu kullanışlı! Yine de versiyonları görmek isterim.
jsalonen

4
Sorunun ... hayır sürümünü dahil yolu standardize gidecekseniz olduğunu düşünüyorum bazen onun Package.version()ya package.__version__ya package.verya da diğer birtakım ihtimal
Joran Beasley

Python mottosunun "bunu yapmanın tek bir yolu var" olduğunu sanıyordum;)?
Ed Randall

3
@EdRandall, hayır - "bunu yapmanın bariz bir yolu". Her zaman kayıtsız bir yol vardır. Ayrıca, tam ifade şudur: Bunu yapmanın bir - ve tercihen sadece bir - bariz bir yolu olmalıdır. Hollandalı değilseniz bu yol ilk bakışta açık olmayabilir.
rosuav

30

Kurulu python dağıtımlarınız hakkında bilgi almak ve bunun için cmd konsolunuzu veya terminalinizi kullanmak istemiyorsanız, bunun yerine python kodunu kullanmak istiyorsanız, aşağıdaki kodu kullanabilirsiniz (python 3.4 ile test edilmiştir):

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)Fonksiyon çağrısı bir iterable döner ve nedeniyle dongu ve baskı fonksiyonu içerdiği elemanları iterable yeni hat karakterleriyle ayrılan basılır ( \n). Sonuç (kurulu dağıtımlarınıza bağlı olarak) aşağıdaki gibi görünecektir:

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
@ Exhuma'nın açıklamasını genişletmek için pip 10 ile şunları kullanmalısınız: import pkg_resources [print (d.project_name) in pkg_resources.working_set]
Almenon

Durum nedir pkg_resources? AFAICR, bunun bir parçasıdır setuptools. Değil pip. Sadece bağlı olarak her zaman mevcut olacağını güvenle varsayabilir miyiz ? setuptoolspip
exhuma

9

Deneyebilirsiniz: Sarısı

Sarısı yüklemek için şunu deneyin:

easy_install yolk

Yolk, kurulu Python paketleri hakkında bilgi almak ve PyPI (Python Paket Dizini) üzerinde bulunan paketleri sorgulamak için kullanılan bir Python aracıdır.

PyPI'yi sorgulayarak hangi paketlerin aktif, aktif olmayan veya geliştirme modunda olduğunu görebilir ve hangilerinin daha yeni sürümleri olduğunu görebilirsiniz.


Bu noktada genellikle bu görev için pip kullanıyorum, ancak dağıtmaya hazır olmadığım çok eski bir projem var ve orada böyle bir araç olduğunu hatırladım. Yine de ne dendiğini hatırlayamadım ... İşte buydu!
meshantz

1
Python 3'ü desteklemiyor (sadece pip'den yüklendi ve çalışma zamanı hataları aldı)
Ohad Cohen

9

Bunu pip'in sonraki sürümlerinde çalıştırmak için (üzerinde test edilmiştir pip==10.0.1) aşağıdakileri kullanın:

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

İçselpydoc pip._internalhelp(pip._internal) durum nedir ? Görüyorum ama altından ulaşamıyorum , pip .__ builtins_ vb. Pip başvuru kılavuzu da boş.
MortenB

1
Maalesef bilmiyorum. Ben de çağrılmasından hoşlanmıyorum _internal. Görünüşe göre işlevsellik resmi olarak açığa çıkmamış. Yani bunu dikkatli bir şekilde halletmelisiniz!
exhuma

8

komut satırından

python -c help('modules')

tüm modülleri görüntülemek için ve belirli modüller için kullanılabilir

python -c help('os')

Aşağıdaki Linux için çalışacak

python -c "help('os')"

5
Bu, pencerelerde çalışır. Linux'ta hata atıyor:-bash: syntax error near unexpected token `('
AjayKumarBasuthkar

bu modül sürümlerini vermez
Stepan Yakovenko

5

Evet! python paket yöneticiniz olarak pip kullanmalısınız ( http://pypi.python.org/pypi/pip )

pip kurulu paketlerle,

pip freeze

ve kurulu tüm paketleri listeleyecektir. Muhtemelen virtualenv ve virtualenvwrapper kullanıyor olmalısınız . Yeni bir projeye başladığınızda şunları yapabilirsiniz:

mkvirtualenv my_new_project

ve sonra (bu virtualenv içinde)

pip install all_your_stuff

Bu şekilde, yapabilirsiniz workon my_new_projectve daha sonra pip freezebu Virtualenv / proje için yüklü olan paketler görmek için.

Örneğin:

  ~  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)➜  ~  

veya bir requirements.pip dosyası içeren bir python paketiniz varsa,

mkvirtualenv my_awesome_project
pip install -r requirements.pip
pip freeze

hile yapacak


Oh evet, aslında bir süredir virtualenv kullanıyorum. Bununla pipbirlikte bu şekilde kullanabileceğimi nasıl anlayamadığımı bilmiyorum !
jsalonen

Hakkında virtualenvküresel sitesi paketleri ile, daha sonra kullanılmak gerekir pip list --local.
Ioannis Filippidis

@johntex asla global site paketlerini kullanmamalısınız!
Andbdrew

Global site paketlerini kullanmak çok faydalıdır. Öyle olmasaydı, seçenek hiç de var olmazdı virtualenv. Bunları kullanmamanın herhangi bir nedeninin farkında değilim ve virtualenvtercih ederseniz kimse sizi izole etmekten alıkoyamaz.
Ioannis Filippidis

Bunları kullanmamanın harika bir nedeni, uygulamanızı veya programınızı dağıtırken veya dağıtırken, diğer kişilerin / sunucuların global site paketlerinize sahip olmamasıdır. Uygulamayı kullanan tek kişi sizseniz, istediğinizi yapın.
Andbdrew

5

Benim almam:

#!/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

İşte PYTHONPATHpython libs dizininizin mutlak yolu yerine bunu kullanarak yapmanın bir yolu :

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

Bunun python içinden çalıştırılması gerekiyorsa, sadece alt süreci çağırabilirsiniz.

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"))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.