Yerel olarak kurulu Python modüllerinin listesini nasıl edinebilirim?


998

Python kurulumumda (UNIX sunucusu) bulunan Python modüllerinin bir listesini almak istiyorum.

Bilgisayarınıza kurulu Python modüllerinin listesini nasıl edinebilirsiniz?


77
>>> help () ve sonra >>> modülleri yapabilirsiniz
Julius Naeumann

1
Bir alternatif var mı? yardım () benim için kilitleniyor.
Paulo Carvalho

2
Bu yanıtların birçoğu bir komut satırına erişiminiz olduğunu varsayar. AWS Lambda kullanıyorsanız, hepsini Python içinden yapmalısınız. Bkz. Stackoverflow.com/a/54939905/117471
Bruno Bronosky

Yanıtlar:


610

Çözüm

Pip> 10.0 ile kullanmayın!

pip freezeBir Python betiğinden benzer bir liste almak için 50 sentim:

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)

(Çok uzun) bir astar olarak:

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

Giving:

['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']

Dürbün

Bu çözüm sistemi kapsamına veya sanal ortam kapsamı için geçerlidir ve kapaklar paketleri tarafından yüklenen setuptools, pipve ( tanrı korusun ) easy_install.

Kullanım durumum

Bu çağrının sonucunu flask sunucuma ekledim, bu yüzden onu http://example.com/exampleServer/environmentaradığımda sunucunun virtualenv'inde kurulu paketlerin listesini alıyorum. Hata ayıklamayı çok kolaylaştırır.

Uyarılar

Bu tekniğin garip bir davranışını fark ettim - Python yorumlayıcısı bir setup.pydosyayla aynı dizinde çağrıldığında, tarafından yüklenen paketi listelemez setup.py.

Yeniden oluşturma adımları:

Sanal ortam oluşturma
$ 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 deposunu klonla 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.

Biz uslu 's var setup.pyiçinde /tmp/behave:

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Python paketini git deposundan yükleyin
(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

Yukarıda belirtilen çözümü /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'

Yukarıda belirtilen çözümü /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çalışma dizini içerdiğinden, İkinci örnekte eksik behave'ın setup.pydosyasını.

Belgelerde bu konuyla ilgili herhangi bir referans bulamadım. Belki bunun için bir hata açacağım.


5
Bu cevap için teşekkürler! Soruyu daha iyi cevapladığını düşünüyorum çünkü "yerel" olarak kurulu Python modüllerini soruyorum. Pip dondurma da her zaman gidilecek yol değildir. Bu daha iyi çalışıyor - sanırım.
Léo Léopold Hertz

3
@Masi Bu çözümün uyarısı hakkında ayrıntılı bir açıklama ekledik. Gerçekten de garip.
Adam Matan

21
Alternatif:import pkg_resources; installed_packages = [(d.project_name, d.version) for d in pkg_resources.working_set]
ebolyen

14
Pip 10'dan itibaren bu cevap artık işe yaramayacak. @Ebolyen'den gelen yorum, işe yarayan alternatif komutları gösterir. Aynı sonuca vardım ve aşağıdaki revize edilmiş kodun tamamını yayınladım.
Big_Al_Tx

5
Pip'in son sürümlerinde bu işe yaramaz ve bir hata mesajı verir AttributeError: module 'pip' has no attribute 'get_installed_distributions'.
HelloGoodbye

1038
help('modules')

Python kabuğunda / isteminde.


10
@ dF pydoc modulesçalışır. Cevap olarak göndermelisiniz.
Abizern

37
Bana bir seg hatası verdi!
Ocak'ta zanbri

3
nobar, zanbri, @Joe Frambach: Ubuntu'da mı? Burada açıklanan bir hata var: bugs.launchpad.net/ubuntu/+source/python2.7/+bug/896836
ChristopheD

2
Modüllerin nereye kurulduğu ve geçerli sürümün ne olduğu hakkında nasıl ek bilgi edinebilirim?
meraklı

5
python -c 'help("modules")'
kenorb

285

Şimdi, bu yöntemleri kendim denedim ve tam olarak reklamı yapılan şeyi aldım: Tüm modüller.

Ne yazık ki, gerçekten stdlib'i umursamıyorsunuz, bir python yüklemesiyle ne elde ettiğinizi biliyorsunuz.

Gerçekten, o şeyi istiyorum ben kurdum.

Aslında şaşırtıcı bir şekilde işe yarayan şey şuydu:

pip freeze

Hangi döndü:

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

"Şaşırtıcı bir şekilde" diyorum çünkü paket yükleme aracı, 'donma' adı altında olmasa da, bu işlevselliği bulmayı bekleyebileceği kesin bir yer, ancak python ambalajı çok garip, bu aracın mantıklı olduğunu merak ediyorum. Pip 0.8.2, Python 2.7.


4
Sanırım ismin arkasındaki fikir, şu anda yüklü olanın "dondurulmuş" bir anlık görüntüsünü almanızdır, daha sonra farklı bir ortama tam olarak aynı modülleri takmak için pip'e geri besleyebilirsiniz.
Ryan

Arash, pip'i Windows'a da yükleyebilirsiniz! Önce setuptools'u kurun ve ardından
pip'i

Bu mükemmel, ama yüklediğim bazı kütüphaneleri kaçırıyor gibi görünüyor. Örneğin, PyQt'yi listelemez.
Junuxx

8
Pip 1.3'ten başlayarak list komutu var.
Piotr Dobrogost

işe yarıyor. Ne karışıklık python. Neden hareketlerini bir araya getiremiyorlar ve Rails'tekine benzer çözümler üretemiyorlar? (Gemfile, bundler, rvm)
Dimitris

106

Pip 1.3 sürümünden bu yana, şunlara erişebilirsiniz:

pip list

Hangi "pip dondurma" için sözdizimsel şeker gibi görünüyor. Yüklemenize veya virtualenv'e özgü tüm modülleri ve bunların sürüm numaralarını listeler. Ne yazık ki herhangi bir modülün mevcut sürüm numarasını göstermez, bulaşıklarınızı yıkamaz veya ayakkabılarınızı parlamaz.


4
Ayrıca burada tartışılan ve global site paketleri pip list --localarasında ayrım yapmak için de vardır . virtualenv
Ioannis Filippidis

1
Çok iyi. Ayrıca sürümleri alır.
aerijman

pip listen basit ve en iyisidir. İşte seçenekler ve detaylar.
Levi Baguley

86
  • İçine ipython" importTab" yazabilirsiniz .

  • Standart Python yorumlayıcısında " help('modules')" yazabilirsiniz .

  • Komut satırında kullanabilirsiniz .pydoc modules

  • Bir komut dosyasında arayın pkgutil.iter_modules().


5
pkgutil.iter_modules()çalışır, yukarıdaki pip çözümü tüm paketleri değil, sadece pip yoluyla yüklenenleri listeler.
metapertür

2
Müthiş! Soru sorulduğundan beri belgelerini geliştirdiklerini düşünüyorum. pydoc module spam , modül belgelerinde spam arar. Son nokta, modülü kullanmak için yeterli bilgiyi veriyor gibi görünüyor. @metaperture Lütfen, pkgutil.iter_modules () tarafından yüklenen tüm yerel modülleri nasıl listeleyebileceğinizi (yardım yoluyla büyük stlib listesini ('modülleri') değil ) .
Léo Léopold Hertz

2
LéoLéopoldHertz @ bu pasajı deneyin 준영: python -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]'. Tüm modül adlarını gerçekten büyük bir Python listesi olarak dökmelidir. x[1]Biraz tarafından üretilen dizilerini modül adı koparmak için kullanılır pkgutil.iter_modules().
Philip Conrad

76

Ben sadece şu anda kullanılan modülleri görmek için kullanın:

import sys as s
s.modules.keys()

Python'unuzda çalışan tüm modülleri gösterir.

Tüm dahili modüller için:

s.modules

Hangi tüm modülleri ve ithalat nesneleri içeren bir diksiyon.


2
# Sys "sys'i s olarak içe aktar" işleminden sonra aşağıdakilerle yazdırabilirsiniz: print sys.modules.keys ()
Dan Evans

Gönderimin neden düzenlendiğinden emin değilim, ancak önceki gönderilerdeki hataları düzeltmek için gönderdiğim bilgileri kullandığınız için teşekkür ederiz. Help () vs help ('') kullanırsanız hata döndürürsünüz. Bu dir ('') & sys ('') vb. İçin de geçerlidir. Umarım bu yardımcı olur ve kaldırılmaz.
Dan Evans

Son gönderimi yoksay, bu yazı düzenlenmedi. Burada bulunan benzer bir yazı düşünüyordum: stackoverflow.com/questions/139180/… Karışıklık için özür dilerim.
Dan Evans

7
Bu sistem, ne yüklü ne pydocde pipkurulu (benim durumumda bir NAS) kısıtlı sistemlerde çalışıyor gibi görünen tek yöntemdir .
Thomas

1
Thomas ile aynı fikirde. Örneğin, aynı zamanda kısıtlı bir ortam türü olan repl.it kullanıyorum. help('modules')sadece bana cevap vermeden takılıyor. Ama bu yaklaşım sysmükemmel çalışıyor
Sergiy Kolodyazhnyy

63

Normal kabukta sadece

pydoc modules

Yukarıdakilerin sadece 'nix platformlarında çalıştığı görülüyor. Her durumda, komut dosyasını aşağıdaki gibi uyarlayarak komut dosyasını buldum ve çalıştırdım: c: \ bin \ pythos_2.7 \ lib \ pydoc.py modülleri - bu liste sonsuza dek sürdü, biçim berbat ve yüklü sürümü atladı numara. Ben almayayım.
David A. Gray

2
@ DavidA.Gray Bunu Python 3 ile bir Windows makinesinde denedim ve aslında işe yarıyor. Python windows başlatıcısını kullanarak py -m pydoc modulescmd veya Powershell'de yapabilirsiniz.
VKK

pydoc modulesPython 3.6 ile Windows 10'da benim için çalışmadı, ancak @VKK değişikliği: py -m pydoc modulescmd / Powershell'de çalışıyor.
Martin

41

Pip 10'dan itibaren, kabul edilen cevap artık çalışmaz. Geliştirme ekibi get_installed_distributionsrutine erişimi kaldırdı . setuptoolsAynı şeyi yapmak için alternatif bir fonksiyon var . İşte pip 10 ile çalışan alternatif bir sürüm:

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)

Lütfen pip'in önceki sürümlerinde de çalışıp çalışmayacağını bana bildirin.


2
Bu çözümü araştırıyorum ve pkg_resources anlamaya çalışırken beynimi sarıyorum. Eğer bunu bir kereden fazla oylayabilirsem yapardım. Teşekkürler @Big_Al_Tx! Güncelleme: Dışında .... sanal ortamımda bir 'pip dondurma' yapmak ve bunu çıktı ile karşılaştırmak, eksik paketleri vardır. Bunun neden olabileceği / olabileceği hakkında herhangi bir fikriniz var mı?
numberwhun

@numberwhun - Bunun sizin için çalışmasına sevindim. Özür dilerim ama ile tutarsızlık için bir cevabım yok pip freeze; bu konudaki bilgimin derinliği oldukça sınırlıdır. Kabul edilen cevap benim için işe yaramadığında çözüme giden yolu setuptoolsbuldum ve bununla ilgili bir cevapla birleştirmeye çalıştım ve işe koyuldum.
Big_Al_Tx

github.com/pypa/pip/issues/5243 - Geliştirme ekibinin siteye erişimin kaldırılması hakkındaki konuşması get_installed_distributions routine.
bl79

@ bl79 - Sanırım referansı aldığım yer tam da burası setuptools.
Big_Al_Tx

@Big_Al_Tx: Eh, (benim ihtiyaçları için gizlenmiş waaaay oldu) setuptools seçeneği etrafında çalıştı ve ben bununla gitti: yüklü_pkgs = subprocess.check_output (['pip', 'donma']) Tam olarak ne yapar yapmak için gerekli .... Yay !!
numberwhun

26

Kurulu paketleri Python kabuğunda listelememiz gerekirse, helpkomutu aşağıdaki gibi kullanabiliriz

>>help('modules package')

22

Normalde pip listpaketlerin bir listesini almak için kullanıyorum (versiyonlu).

Bu elbette sanal bir ortamda da işe yarıyor. Yalnızca sanal ortamda yüklü olanları göstermek için (genel paketler değil) kullanın pip list --local.

Buradapip list , birkaç iyi örnekle mevcut tüm seçenekleri gösteren belgeler bulunmaktadır .


13

Pkgutil.iter_modules kullanarak çok basit arama

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 döngüsü yerine kullanırken kullanmak için herhangi bir neden var mı? Kullanmayı yazdım for m in iter_modules()ve işe yaradı.
Joao Ponte

13

pencerelerde, cmd olarak girin

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

Bu benim için çalıştı: python3 -m pip freeze - python 3.5.3 için.
dpminusa

Bu iyi çalışıyor ve değişkenleriniz tanımlanmışsa libs dizininde olmanıza gerek yok
mcy

12

OS X'te özel yüklü bir python 2.7 ile karşılaştım. Yüklü modülleri listelemek için X11 gerekiyordu (hem yardım hem de pydoc kullanarak).

X11'i kurmadan tüm modülleri listeleyebilmek için http-server olarak pydoc çalıştırdım, yani:

pydoc -p 12345

Ardından Safari'yi http://localhost:12345/tüm modülleri görmeye yönlendirmek mümkündür .



12

Bu yardımcı olacak

Terminalde veya IPython'da şunu yazın:

help('modules')

sonra

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

Bu kabul edilen cevap olmalı! One line :)
AlmostPitt

9

Bu çözüm birincil modüllere dayanır importlibve pkgutilCPython 3.4 ve CPython 3.5 ile çalışır, ancak CPython 2'yi desteklemez.


açıklama

  1. sys.builtin_module_names- tüm yerleşik modülleri adlandırır (cevabımı buraya bakın )
  2. pkgutil.iter_modules() - kullanılabilir tüm modüller hakkında bilgi döndürür
  3. importlib.util.find_spec() - varsa, modülü içe aktarma hakkında bir bilgi döndürür
  4. BuiltinImporter- yerleşik modüller için bir ithalatçı ( dokümanlar )
  5. SourceFileLoader- standart bir Python modülü için bir ithalatçı (varsayılan olarak uzantısı * .py'dir) ( dokümanlar )
  6. ExtensionFileLoader- paylaşımlı kütüphane olarak modüller için bir ithalatçı (C veya C ++ ile yazılmış)

Tam kod

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()

kullanım

CPython3.5 için (kesik)

$ 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 için (kesik)

$ 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*******************************)

Adam'ın yaklaşımına yaklaşımınızı burada karşılaştırabilir misiniz stackoverflow.com/a/23885252/54964
Léo Léopold Hertz 준영

@ Léo Léopold Hertz, neden ihtiyacın var?
PADYMKO

Yaklaşımınızın Adem'in yaklaşımından daha iyi / kötü olduğunu anlamak.
Léo Léopold Hertz 준영

1
@ Léo Léopold Hertz. Kısa bir cevap: Bir prodüksiyonda kendiniz deneyin ve kendiniz sonuç alın. Uzun cevap: Adem'in yaklaşımı, pipPython'da yazılmış yazılım paketlerini kurmak ve yönetmek için kullanılan - paket yönetim sistemine ve sonuç pip.get_installed_distributions()olarak pip ile kurulan modüllere dayanmaktadır . Cevabım tamamen Python'un standart kütüphanesine dayanıyor ve içe aktarılabilecek tüm modülleri kapsıyor. Cevabımın en büyük dezavantajı - CPython 2 için destek yok
PADYMKO

1
@ Léo Léopold Hertz yanılıyorsunuz, öyle. Bilgisayarımda test ettim. Cevabım, **truncated**çıktının kesildiği özel bir anlam içeriyor . Belki dikkatli olmazsınız, ama eğer yapmazsa, bana sisteminiz ve Python uygulaması hakkında bilgi göndermek için, düzeltmek için ek araştırma yapacağım.
PADYMKO

9

Uyarı: Adam Matan pip> 10.0'da bu kullanımdan vazgeçiyor. Ayrıca, aşağıdaki @ sinoroc'un yorumunu okuyun

Bu Adam Matan'ın cevabından ilham aldı (kabul edilen cevap ):

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

daha sonra bir tabloyu

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
-------------------------------------------  --------------  ------

Böylece, hangi paketleri yükleyip yüklemediğinizi kolayca fark edebilirsiniz sudo.


Bir kenara not: Bir paketi bir kez sudove bir kez olmadan yüklediğimde , diğerinin listelenmemesi için önceliğe sahip olduğunu fark ettim (sadece bir konum gösterilir). Daha sonra yerel dizinde sadece bir tane olduğuna inanıyorum. Bu geliştirilebilir.



1
@sinoroc Bunu belirttiğin için teşekkür ederim. 1 ile 3 arasındaki noktalar bu çözüm için geçerli görünmemektedir, çünkü bu komut dosyasının tek amacı bir pipkez kullanmak ve sonra çıkmaktır. Davranışın değişebileceği daha çok bir sorun gibi görünüyor.
Daniel F

Kabul edildiğinde, herkese açık API'nın olmamasının nedenleri bu özel kod parçası için geçerli değildir. Ancak pip, genel bir API'yi garanti etmek zorunda olmadığından, daha önce olduğu gibi daha sonraki bir sürümde dahili API'lerini, kod yapısını vb. Değiştirmek ücretsizdir. Bu nedenle, bu kodun, dahili API'lerin herkese açık olmayan dahili API'ler olduğunu açıklamak amacıyla önceki dahili kod yeniden düzenlemesini yakalamak için bir dene / hariç vardır ( _internal). Sonuçta, açıkça işe yarıyor ama kötü uygulama. Daha iyi alternatifler var, bazıları bu sorunun diğer cevaplarında.
sinoroc

1
"pip" modülü yoksa bu komut dosyası çalışmaz.
Alexander Stohr


6

Yüklü bir anaconda python dağıtımınız varsa,

$conda list

yukarıda tarif edilen çözeltilere ek olarak.


Bu çizgiyi nerede / nasıl yönetiyorsunuz?
HuckIt

UNIX / Mac OS X makinenizdeyseniz, terminalinizi açın ve sadece yazın conda install, işe
yaramalı

Windows 7 makinesindeyim. Aslında benim yolumda buldum, ama conda.exe AppData \ Local \ Continuum \ Anaconda \ Scripts.
HuckIt

6
  1. kullanılabilir tüm modülleri almak için sys.modules
  2. tüm kurulu modülleri almak için (oku: tarafından yüklendi pip),pip.get_installed_distributions()

İkinci amaç için örnek kod:

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 komutu en yeni OSX'in Python'unda çalışmaz. NameError: 'system' adı tanımlanmadı .
Léo Léopold Hertz 준영

@Masi aradınız /usr/bin/pythonveya bir gelen python.org ? Birincisi için sys.modulessorunsuz bir şekilde kullanabilirim .
yegle

Yani / usr / bin / python .
Léo Léopold Hertz 준영

@Masi Hala bu sorunla ilgilenip ilgilenmediğinizden emin değilim. Görünüşe göre system.modulesyerine kullanıyorsunuz sys.modules.
yegle

Lol. Benim hatam aslında sys -package ithal etmedi oldu. Yani çalışan yerine ithalat sys; sys.modüller beklendiği gibi çalışır.
Léo Léopold Hertz 준영

6

Pip 20 gibi Son Sürümler İçin

Python düzenleyicinizde veya IPython'unuzda aşağıdakileri çalıştırın

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

Diğer cevapları okuyun ve Python içinde en hızlı ve en kolay olan bu komboyu bir araya getirin


4

pip freeze tüm paketleri bulmak yapar, ancak python paketlerinin olduğu tüm yolları listelemek için aşağıdaki komutu yazabilirsiniz.

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

4

Bir kedinin derisini almanın birçok yolu vardır.

  • En basit yol, pydocişlevi doğrudan kabuktan aşağıdakilerle kullanmaktır :
    pydoc modules

  • Ancak daha fazla bilgi için pip-date adlı ve kurulum tarihlerini de belirten aracı kullanın .
    pip install pip-date


resim açıklamasını buraya girin


3

Birçok fikir var, başlangıçta bu ikisini düşünüyoruz:

bip

eksileri: her zaman yüklü değil

yardımı ( 'modüller')

eksileri: konsola çıktı; kırık modüllerle (bkz. ubuntu ...) segfault olabilir

Temel kütüphaneleri kullanarak ve eski python 2.x ile uyumlu, kolay bir yaklaşıma ihtiyacım var

Ve ışığı görüyorum: listmodules.py

2.5'te dokümantasyon kaynak dizininde gizli bir Python kurulumu için mevcut tüm modülleri listeleyen küçük bir komut dosyasıdır.

Artıları:

sadece kullanır imp , sys, os, re, zaman

Python 1.5.2 ve daha yeni sürümlerde çalışacak şekilde tasarlanmıştır

kaynak kodu gerçekten kompakttır, bu nedenle onunla kolayca uğraşabilirsiniz, örneğin bir hata ayıklama modülü istisna listesi geçirmek (bunları içe aktarmaya çalışmayın)


3

AWS Lambda'da varsayılan olarak mevcut paketlerin belirli bir sürümünü bulmam gerekiyordu. Bunu bu sayfadaki fikirlerin bir karışımı ile yaptım. Bunu gelecek nesiller için paylaşıyorum.

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
                ],
    }

Ne keşfetti sağlanan sağlanan boto3 kütüphane güncel ve yolumun başarısız olduğunu benim hatam değildi. Projeme boto3 ve botocore eklemem gerekiyordu. Ama bu olmadan kodumun kötü olduğunu düşünerek kafamı vurabilirdim.

{
  "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
    },
...

Keşfettiğim şey resmi olarak yayınladıklarından farklıydı . Bunu yazarken:

  • İşletim sistemi - Amazon Linux
  • AMI - amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2
  • Linux çekirdeği - 4.14.77-70.59.amzn1.x86_64
  • JavaScript için AWS SDK - 2.290.0 \
  • Python için SDK (Boto 3) - 3-1.7.74 botocore-1.10.74

1

Kurulum

pip install pkgutil

kod

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

Örnek Çıktı:

multiprocessing
netrc
nntplib
ntpath
nturl2path
numbers
opcode
pickle
pickletools
pipes
pkgutil

1

Yüklü modüllerin listesini döndürecek bir python kodu çözümü. Kod kolayca sürüm numaralarını içerecek şekilde değiştirilebilir.

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)


-10

Kabuktan

ls site-packages

Bu yardımcı olmazsa, bunu yapabilirsiniz.

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

Ve bunun ne ürettiğine bakın.


hangi site paketleri dizini? Bu daha iyi olabilir: ls / usr / {local /,} lib / python $ (python -V 2> & 1 | cut -d "" -f2 | cut -d. -F1-2) / site paketleri
vezult

Ayrıca, bu özel bir PYTHONPATH modülleri veya modüllerin dahili göstermek olmaz, ya olanları Setuptools "kalkınma modunda" vb yüklü
dF.

/Usr/local/lib/python2.5/site-paketlerim boş olsa da, modüller kurdum.
Léo Léopold Hertz 준영

14
Bu düşürülmüş cevabı silmediği için şeref. Ortak bir cevabın neden yanlış kabul edildiğini görmek toplum için yararlıdır.
Jeremy Stein

1
@JeremyStein Daha iyi bir strateji (daha yararlı ve muhtemelen daha az zarar verici), muhtemelen yorumlarda açıklandıktan sonra sorunun nedenini açıklamak için soruyu düzenlemek olacaktır ...
Kyle Strand
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.