Pertanyaan Bagaimana saya bisa mendapatkan daftar modul Python yang dipasang secara lokal?


Saya ingin mendapatkan daftar modul Python, yang ada di instalasi Python saya (server UNIX).

Bagaimana Anda bisa mendapatkan daftar modul Python yang terpasang di komputer Anda?


741
2018-04-11 12:34


asal


Jawaban:


Larutan

50 sen saya untuk mendapatkan pip freeze-seperti daftar dari skrip Python:

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)

Sebagai liner (terlalu panjang):

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

Memberi:

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

Cakupan

Solusi ini berlaku untuk lingkup sistem atau lingkup lingkungan virtual, dan mencakup paket yang diinstal oleh setuptools, pip dan (amit-amit) easy_install.

Kasus penggunaan saya

Saya menambahkan hasil panggilan ini ke server labu saya, jadi ketika saya menyebutnya dengan http://example.com/exampleServer/environment Saya mendapatkan daftar paket yang diinstal pada virtualenv server. Itu membuat debugging jauh lebih mudah.

Peringatan

Saya telah memperhatikan perilaku aneh dari teknik ini - ketika interpreter Python dipanggil dalam direktori yang sama sebagai setup.py file, tidak mencantumkan paket yang diinstal oleh setup.py.

Langkah-langkah untuk mereproduksi:

Buat lingkungan virtual
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $ 
Mengkloning git repo dengan 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.

Kami memiliki perilaku setup.py di /tmp/behave:

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Instal paket python dari repo git
(test_env) $ cd /tmp/behave && python setup.py 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

Jika kita menjalankan solusi tersebut dari /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'

Jika kita menjalankan solusi tersebut dari /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 hilang dari contoh kedua, karena direktori kerja berisi behave's setup.py mengajukan.

Saya tidak dapat menemukan referensi apa pun tentang masalah ini di dokumentasi. Mungkin saya akan membuka bug untuk itu.


484
2018-05-27 09:05



help('modules')

dalam shell Python / prompt.


800
2018-04-11 12:45



Sekarang, metode ini saya coba sendiri, dan saya mendapat persis apa yang diiklankan: Semua modul.

Sayangnya, Anda benar-benar tidak peduli banyak tentang stdlib, Anda tahu apa yang Anda dapatkan dengan menginstal python.

Sungguh, saya ingin barang-barang itu saya diinstal.

Apa yang sebenarnya, mengejutkan, bekerja dengan baik adalah:

pip freeze

Yang dikembalikan:

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

Saya mengatakan "mengejutkan" karena alat penginstalan paket adalah tempat yang tepat yang diharapkan untuk menemukan fungsi ini, meskipun tidak dengan nama 'freeze' tetapi kemasan python sangat aneh, sehingga saya terperangah bahwa alat ini masuk akal. Pip 0.8.2, Python 2.7.


221
2018-01-16 03:42



  • Di ipython Anda bisa mengetik "importTab".

  • Dalam interpreter standar Python, Anda dapat mengetik "help('modules')".

  • Di baris perintah, Anda dapat menggunakan pydoc  modules.

  • Di skrip, panggil pkgutil.iter_modules().


69
2018-02-08 13:24



Sejak versi pip 1.3, Anda punya akses ke:

pip list

Yang tampaknya gula sintaksis untuk "pip beku". Ini akan daftar semua modul khusus untuk instalasi Anda atau virtualenv, bersama dengan nomor versi mereka. Sayangnya ini tidak menampilkan nomor versi saat ini dari modul apa pun, juga tidak mencuci piring Anda atau menyemir sepatu Anda.


62
2017-07-25 22:56



Dalam shell biasa hanya digunakan

pydoc modules

51
2017-08-23 09:45



Saya hanya menggunakan ini untuk melihat modul yang digunakan saat ini:

import sys as s
s.modules.keys()

yang menunjukkan semua modul yang berjalan di python Anda.

Untuk semua modul built-in, gunakan:

s.modules

Yang merupakan dict yang berisi semua modul dan mengimpor objek.


48
2018-06-22 22:02



Jika kita perlu daftar paket yang diinstal di shell Python, kita dapat menggunakan helpperintah sebagai berikut

>>help('modules package')

18
2018-01-02 09:26



Aku berlari ke python 2,7 kustom yang diinstal pada OS X. Diperlukan X11 untuk daftar modul yang diinstal (baik menggunakan bantuan dan pydoc).

Agar dapat mendaftarkan semua modul tanpa menginstal X11, saya menjalankan pydoc sebagai http-server, yaitu:

pydoc -p 12345

Maka dimungkinkan untuk mengarahkan Safari ke http://localhost:12345/ untuk melihat semua modul.


11
2017-08-24 10:28



Pencarian yang sangat sederhana menggunakan 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]

9
2018-05-12 12:34