Anda bisa melakukan >>> help () dan kemudian >>> modules
Julius Naeumann
1
Apakah ada alternatif? help () hang untuk saya.
Paulo Carvalho
2
Banyak dari jawaban ini menganggap Anda memiliki akses ke baris perintah. Jika Anda menggunakan AWS Lambda, Anda harus melakukan semuanya dari dalam Python. Lihat stackoverflow.com/a/54939905/117471
Bruno Bronosky
Jawaban:
610
Larutan
Jangan gunakan dengan pip> 10.0!
50 sen saya untuk mendapatkan pip freezedaftar seperti 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 satu liner (terlalu panjang):
sorted(["%s==%s"%(i.key, i.version)for i in pip.get_installed_distributions()])
Solusi ini berlaku untuk ruang lingkup sistem atau ruang lingkup lingkungan virtual, dan mencakup paket-paket yang diinstal oleh setuptools, pipdan ( allah dilarang ) easy_install.
Kasus penggunaan saya
Saya menambahkan hasil panggilan ini ke server labu saya, jadi ketika saya memanggilnya dengan http://example.com/exampleServer/environmentsaya mendapatkan daftar paket yang diinstal pada virtualenv server. Itu membuat debugging jauh lebih mudah.
Peringatan
Saya telah memperhatikan perilaku aneh teknik ini - ketika interpreter Python dipanggil dalam direktori yang sama dengan setup.pyfile, itu tidak mencantumkan paket yang diinstal oleh setup.py.
Langkah-langkah 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) $
(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Instal paket python dari git repo
(test_env) $ cd /tmp/behave && pip install .
running install
...Installed/private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.eggFinished processing dependencies for behave==1.2.5a1
Jika kami 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 kami 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.5a1hilang dari contoh kedua, karena direktori kerja mengandung behave's setup.pyberkas.
Saya tidak dapat menemukan referensi untuk masalah ini dalam dokumentasi. Mungkin saya akan membuka bug untuk itu.
Terima kasih atas jawaban ini! Saya pikir lebih baik menjawab pertanyaan karena saya bertanya "secara lokal" menginstal modul Python. Membekukan pip juga tidak selalu merupakan jalan yang harus ditempuh. Ini berfungsi lebih baik - saya pikir.
Léo Léopold Hertz 준영
3
@Masi Baru saja menambahkan penjelasan rinci tentang peringatan dari solusi ini. Ini memang aneh.
Adam Matan
21
Alternatif:import pkg_resources; installed_packages = [(d.project_name, d.version) for d in pkg_resources.working_set]
ebolyen
14
Mulai pip 10, jawaban ini tidak akan berfungsi lagi. Komentar dari @ebolyen menunjukkan perintah alternatif yang berfungsi. Saya sampai pada kesimpulan yang sama dan memposting kode revisi lengkap di bawah ini.
Big_Al_Tx
5
Di versi pip terbaru, ini tidak akan berfungsi, menghasilkan pesan kesalahan yang mengatakan AttributeError: module 'pip' has no attribute 'get_installed_distributions'.
Saya mengatakan "secara mengejutkan" karena alat instal paket adalah tempat yang tepat yang diharapkan untuk menemukan fungsionalitas ini, walaupun tidak dengan nama 'beku' tetapi kemasan python sangat aneh, sehingga saya terperangah bahwa alat ini masuk akal. Pip 0.8.2, Python 2.7.
Saya kira ide di balik namanya adalah bahwa Anda mendapatkan snapshot "beku" dari apa yang diinstal sekarang, yang nantinya dapat Anda masukkan kembali ke pip untuk mendapatkan modul yang sama persis yang diinstal di lingkungan yang berbeda.
Ryan C. Thompson
Arash, Anda dapat menginstal pip di Windows juga! Pertama instal setuptools dan kemudian gunakan easy_install untuk menginstal pip :)
gawbul
Ini luar biasa, tetapi sepertinya melewatkan beberapa perpustakaan yang saya instal. Misalnya, itu tidak mencantumkan PyQt.
berhasil. Apa python berantakan itu. Mengapa mereka tidak dapat melakukan tindakan bersama dan menghasilkan solusi yang mirip dengan yang ada di Rails? (Gemfile, bundler, rvm)
Dimitris
106
Sejak pip versi 1.3, Anda memiliki akses ke:
pip list
Yang tampaknya menjadi gula sintaksis untuk "pip freeze". Ini akan mendaftar semua modul khusus untuk instalasi Anda atau virtualenv, bersama dengan nomor versi mereka. Sayangnya itu tidak menampilkan nomor versi modul apa pun saat ini, juga tidak mencuci piring atau menyemir sepatu Anda.
pkgutil.iter_modules()berfungsi, solusi pip di atas tidak mencantumkan semua paket, hanya yang diinstal melalui pip.
metaperture
2
Luar biasa! Saya pikir mereka telah meningkatkan dokumentasi, sejak pertanyaan diajukan. pydoc modules spam mencari spam di docs of modules. Poin terakhir tampaknya memberi Anda informasi yang cukup untuk menggunakan modul. @metaperture Dapatkah Anda, tolong, berikan contoh bagaimana Anda mendaftar semua modul lokal yang diinstal (bukan daftar besar stlib dengan bantuan ('modul')) oleh pkgutil.iter_modules () .
Léo Léopold Hertz 준영
2
@ LéoLéopoldHertz 준영 Coba potongan ini: python -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]'. Seharusnya membuang semua nama modul sebagai satu daftar Python yang sangat besar. The x[1]bit digunakan untuk memetik nama modul dari tuple yang dihasilkan oleh pkgutil.iter_modules().
Philip Conrad
76
Saya hanya menggunakan ini untuk melihat modul yang sedang digunakan:
import sys as s
s.modules.keys()
yang menunjukkan semua modul berjalan di python Anda.
Untuk semua modul bawaan gunakan:
s.modules
Yaitu dict yang berisi semua modul dan objek impor.
# Setelah Anda mengimpor sys "import sys as s" Anda dapat mencetak dengan: print sys.modules.keys ()
Dan Evans
Tidak yakin mengapa posting saya diedit, tetapi terima kasih telah menggunakan info yang saya posting untuk memperbaiki kesalahan pada posting sebelumnya. Anda akan mengembalikan kesalahan jika Anda menggunakan bantuan () vs bantuan (''). Ini berlaku untuk dir ('') & sys ('') dll. Semoga ini bisa membantu & tidak dihapus.
Dan Evans
Abaikan posting terakhir saya, posting ini tidak diedit. Saya sedang memikirkan posting serupa yang ditemukan di sini: stackoverflow.com/questions/139180/... Maaf atas kebingungannya.
Dan Evans
7
Terpilih, karena ini adalah satu-satunya metode yang tampaknya bekerja pada sistem terbatas yang tidak memiliki pydocatau pipmenginstal (NAS dalam kasus saya).
Thomas
1
Setuju dengan Thomas. Saya menggunakan repl.it, misalnya, yang juga merupakan tipe lingkungan terbatas. help('modules')hanya hang tanpa respons untukku. Tetapi pendekatan ini sysbekerja dengan sempurna
Tampaknya di atas hanya berfungsi pada platform nix. Bagaimanapun, saya menemukan dan menjalankan skrip, mengadaptasi perintah sebagai berikut: c: \ bin \ pythos_2.7 \ lib \ pydoc.py modul - daftar itu membutuhkan waktu lama untuk dibangun, formatnya payah, dan ia menghilangkan versi yang diinstal jumlah. Saya akan lewat.
David A. Gray
2
@ DavidA.Gray Baru saja mencoba ini pada mesin Windows dengan Python 3, dan ternyata berfungsi. Menggunakan peluncur jendela python yang dapat Anda lakukan py -m pydoc modulesdalam cmd atau Powershell.
VKK
pydoc modulestidak bekerja untuk saya di Windows 10 dengan Python 3.6, tetapi modifikasi @VKK: py -m pydoc modulestidak bekerja di cmd / Powershell.
Martin
41
Pada pip 10, jawaban yang diterima tidak akan berfungsi lagi. Tim pengembangan telah menghapus akses ke get_installed_distributionsrutinitas. Ada fungsi alternatif dalam setuptoolsuntuk melakukan hal yang sama. Berikut ini adalah versi alternatif yang berfungsi dengan pip 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)
Tolong beri tahu saya jika itu juga akan atau tidak berfungsi di versi sebelumnya dari pip.
Saya telah mencari solusi ini dan menghancurkan otak saya mencoba mencari tahu pkg_resources. Jika saya bisa memperbaiki ini lebih dari sekali saya akan. Terima kasih, @Big_Al_Tx! Pembaruan: Kecuali .... ketika saya melakukan 'pembekuan pipa' di lingkungan virtual saya dan membandingkannya dengan output ini, ada paket yang hilang. Adakah pemikiran mengapa hal itu bisa / akan terjadi?
numberwhun
@numberwhun - Saya senang ini berhasil untuk Anda. Maaf, tapi saya tidak punya jawaban untuk perbedaan dengan pip freeze; kedalaman pengetahuan saya tentang topik ini agak terbatas. Saya agak meraba-raba mencari solusi ketika jawaban yang diterima tidak bekerja untuk saya dan saya mencoba menggabungkannya dengan jawaban yang terkait setuptoolsdan membuatnya bekerja.
@ bl79 - Saya pikir itu adalah tempat yang tepat di mana saya mendapat referensi setuptools.
Big_Al_Tx
@Big_Al_Tx: Yah, saya semacam bekerja di sekitar opsi setuptools (yang waaaay dikaburkan untuk kebutuhan saya) dan saya pergi dengan ini: install_pkgs = subprocess.check_output (['pip', 'freeze']) Itu melakukan apa yang saya lakukan membutuhkannya untuk melakukan .... Yay !!
numberwhun
26
Jika kita perlu mendaftar paket yang diinstal di shell Python, kita dapat menggunakan helpperintah sebagai berikut
Saya biasanya menggunakan pip listuntuk mendapatkan daftar paket (dengan versi).
Ini bekerja di lingkungan virtual juga, tentu saja. Untuk menunjukkan apa yang diinstal hanya dalam lingkungan virtual (bukan paket global), gunakan pip list --local.
Berikut dokumentasi yang menunjukkan semua pip listopsi yang tersedia , dengan beberapa contoh bagus.
Ini bekerja untuk saya menggunakan: python3 -m pip freeze - for python 3.5.3.
dpminusa
Ini berfungsi dengan baik dan Anda tidak perlu berada di direktori libs juga jika variabel Anda didefinisikan
mcy
12
Saya bertemu dengan python 2.7 yang diinstal khusus pada OS X. Diperlukan X11 untuk mendaftar modul yang diinstal (keduanya menggunakan bantuan dan pydoc).
Untuk dapat mendaftar semua modul tanpa menginstal X11 saya menjalankan pydoc sebagai http-server, yaitu:
pydoc -p 12345
Maka mungkin untuk mengarahkan Safari http://localhost:12345/untuk melihat semua modul.
Ini harus menjadi jawaban yang diterima! Satu baris :)
AlmostPitt
9
Solusi ini primer berdasarkan pada modul importlibdan pkgutildan bekerja dengan CPython 3.4 dan CPython 3.5, tetapi tidak memiliki dukungan untuk CPython 2.
Penjelasan
sys.builtin_module_names- beri nama semua modul bawaan (lihat jawaban saya di sini )
pkgutil.iter_modules() - mengembalikan informasi tentang semua modul yang tersedia
importlib.util.find_spec() - mengembalikan informasi tentang mengimpor modul, jika ada
BuiltinImporter- importir untuk modul bawaan ( dokumen )
SourceFileLoader- importir untuk modul Python standar (secara default memiliki ekstensi * .py) ( docs )
ExtensionFileLoader- importir untuk modul sebagai pustaka bersama (ditulis pada C atau C ++)
Kode lengkap
import sys
import os
import shutil
import pkgutil
import importlib
import collections
if sys.version_info.major ==2:raiseNotImplementedError('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 modulesfor 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 yetif module.loader notin 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 modulesfor module_name in pkgutil.iter_modules():# ignore this moduleif 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 notin 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()
Untuk memahami bagaimana pendekatan Anda lebih baik / lebih buruk daripada pendekatan Adam.
Léo Léopold Hertz 준영
1
@ Léo Léopold Hertz. Jawaban singkat: coba sendiri dalam produksi dan menarik kesimpulan sendiri. Jawaban panjang: pendekatan Adam didasarkan pada pip- sistem manajemen paket yang digunakan untuk menginstal dan mengelola paket perangkat lunak yang ditulis dengan Python dan hasilnya pip.get_installed_distributions()mengembalikan modul yang diinstal dengan pip. Jawaban saya sepenuhnya didasarkan pada pustaka standar Python dan mencakup semua modul yang tersedia untuk impor. Kelemahan terbesar jawaban saya - tidak ada dukungan untuk CPython 2.
PADYMKO
1
@ Léo Léopold Hertz Anda salah, ia melakukannya. Saya mengujinya di komputer saya. Jawaban saya mengandung makna khusus **truncated**, di mana output terpotong. Mungkin Anda tidak hati-hati, tetapi jika tidak, maka untuk mengirim saya informasi tentang sistem Anda dan implementasi Python, saya akan membuat riset tambahan untuk memperbaikinya.
PADYMKO
9
Peringatan: Adam Matan tidak menyarankan penggunaan ini dalam pip> 10.0. Juga, baca komentar @ sinoroc di bawah ini
Ini diilhami oleh jawaban Adam Matan (yang diterima):
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))
yang memungkinkan Anda dengan mudah membedakan paket mana yang Anda instal dengan dan tanpa sudo.
Catatan samping: Saya perhatikan ketika saya menginstal paket sekali melalui sudo dan sekali tanpa, satu diutamakan sehingga yang lain tidak terdaftar (hanya satu lokasi ditampilkan). Saya percaya bahwa hanya yang ada di direktori lokal yang terdaftar. Ini bisa diperbaiki.
@ sinoroc Terima kasih telah menunjukkan ini. Poin 1 hingga 3 tampaknya tidak berlaku untuk solusi ini, karena skrip ini memiliki tujuan tunggal untuk menggunakan pipsekali dan kemudian keluar. Tampaknya lebih dari masalah yang bisa berubah perilaku.
Daniel F
Setuju, alasan mengapa tidak ada API publik tidak berlaku untuk bagian kode tertentu ini. Tetapi karena pip tidak terikat untuk menjamin API publik, ia bebas untuk mengubah API internal, struktur kode, dll. Dalam rilis nanti, seperti yang sudah dilakukan sebelumnya. Inilah sebabnya mengapa kode ini memiliki coba / kecuali, untuk menangkap reorganisasi kode internal sebelumnya yang dimaksudkan untuk memperjelas bahwa API internal adalah API internal, bukan API publik ( _internal). Semua dalam semua, itu jelas bekerja tetapi merupakan praktik yang buruk. Ada alternatif yang lebih baik, ada yang di jawaban lain untuk pertanyaan ini.
sinoroc
1
skrip ini tidak akan berfungsi jika modul "pip" tidak ada.
Alexander Stohr
8
Selain menggunakan pip freezesaya telah menginstal kuning telur di lingkungan virtual saya.
Perintah sys.modules tidak berfungsi di Python OSX terbaru. NameError: nama 'sistem' tidak didefinisikan .
Léo Léopold Hertz 준영
@Masi Apakah maksud Anda /usr/bin/pythonatau yang berasal dari python.org ? Untuk yang pertama, saya bisa menggunakan sys.modulestanpa masalah.
yegle
Maksud saya / usr / bin / python .
Léo Léopold Hertz 준영
@Masi Tidak yakin apakah Anda masih tertarik dengan masalah ini. Rupanya Anda menggunakan system.modulesbukan sys.modules.
yegle
Lol. Kesalahan saya adalah saya awalnya tidak mengimpor sys -paket. Jadi menjalankan bukan mengimpor sistem; sys.modules bekerja seperti yang diharapkan.
Léo Léopold Hertz 준영
6
Untuk Versi Terbaru Seperti Pip 20
Jalankan yang berikut ini di editor python atau IPython Anda
import pkg_resources;
installed_packages ={d.project_name: d.version for d in pkg_resources.working_set}print(installed_packages)
Baca jawaban lain dan kumpulkan kombinasi ini, yang tercepat dan termudah di dalam Python
pip freeze tidak semuanya menemukan paket namun seseorang dapat dengan mudah menulis perintah berikut untuk mendaftar semua path di mana paket python berada.
Tersembunyi di direktori sumber dokumentasi di 2.5 adalah skrip kecil yang mencantumkan semua modul yang tersedia untuk instalasi Python.
Pro:
hanya menggunakan imp, sys, os, re, time
dirancang untuk berjalan di Python 1.5.2 dan yang lebih baru
kode sumbernya benar-benar ringkas, sehingga Anda dapat bermain-main dengan mudah, misalnya untuk melewatkan daftar pengecualian modul kereta (jangan coba mengimpornya)
Saya perlu menemukan versi spesifik paket yang tersedia secara default di AWS Lambda. Saya melakukannya dengan banyak ide dari halaman ini. Saya membagikannya untuk anak cucu.
import pkgutil
__version__ ='0.1.1'def get_ver(name):try:return str(__import__(name).__version__)except:returnNonedef 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],}
Apa yang saya temukan adalah bahwa perpustakaan boto3 yang disediakan sudah ketinggalan zaman dan bukan salah saya bahwa kode saya gagal. Saya hanya perlu menambahkan boto3 dan botocore ke proyek saya. Tetapi tanpa ini saya akan membenturkan kepala saya berpikir kode saya buruk.
Berikut ini adalah solusi kode python yang akan mengembalikan daftar modul yang diinstal. Seseorang dapat dengan mudah memodifikasi kode untuk memasukkan nomor versi.
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)
direktori paket situs mana? Ini mungkin lebih baik: ls / usr / {local /,} lib / python $ (python -V 2> & 1 | cut -d "" -f2 | cut -d. -F1-2) / paket-situs
vezult
Ini juga tidak akan menampilkan modul bawaan, atau modul dalam PYTHONPATH khusus, atau yang dipasang di setuptools "mode pengembangan" dll.
dF.
/Usr/local/lib/python2.5/site-package saya kosong, walaupun saya sudah menginstal modul.
Léo Léopold Hertz 준영
14
Kudos karena tidak menghapus jawaban yang diturunkan ini. Sangat membantu komunitas untuk dapat melihat mengapa jawaban umum dianggap salah.
Jeremy Stein
1
@JeremyStein Strategi yang lebih baik (lebih bermanfaat dan mungkin lebih sedikit merusak) mungkin akan mengedit pertanyaan untuk menjelaskan mengapa itu salah, setelah ini dijelaskan dalam komentar ...
Jawaban:
Larutan
Jangan gunakan dengan pip> 10.0!
50 sen saya untuk mendapatkan
pip freeze
daftar seperti dari skrip Python:Sebagai satu liner (terlalu panjang):
Memberi:
Cakupan
Solusi ini berlaku untuk ruang lingkup sistem atau ruang lingkup lingkungan virtual, dan mencakup paket-paket yang diinstal oleh
setuptools
,pip
dan ( allah dilarang )easy_install
.Kasus penggunaan saya
Saya menambahkan hasil panggilan ini ke server labu saya, jadi ketika saya memanggilnya 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 teknik ini - ketika interpreter Python dipanggil dalam direktori yang sama dengan
setup.py
file, itu tidak mencantumkan paket yang diinstal olehsetup.py
.Langkah-langkah mereproduksi:
Buat lingkungan virtual Mengkloning git repo dengansetup.py
Kami memiliki perilaku
Instal paket python dari git reposetup.py
di/tmp/behave
:Jika kami menjalankan solusi tersebut dari
/tmp
Jika kami menjalankan solusi tersebut dari
/tmp/behave
behave==1.2.5a1
hilang dari contoh kedua, karena direktori kerja mengandungbehave
'ssetup.py
berkas.Saya tidak dapat menemukan referensi untuk masalah ini dalam dokumentasi. Mungkin saya akan membuka bug untuk itu.
sumber
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'
.dalam shell Python / prompt.
sumber
pydoc modules
berfungsi. Anda harus mengirimkannya sebagai jawaban.python -c 'help("modules")'
Sekarang, metode ini saya coba sendiri, dan saya mendapatkan apa yang diiklankan: Semua modul.
Sayangnya, sungguh Anda tidak terlalu peduli dengan stdlib, Anda tahu apa yang Anda dapatkan dengan instalasi python.
Sungguh, saya ingin barang yang saya instal.
Apa yang sebenarnya, secara mengejutkan, bekerja dengan baik adalah:
Yang dikembalikan:
Saya mengatakan "secara mengejutkan" karena alat instal paket adalah tempat yang tepat yang diharapkan untuk menemukan fungsionalitas ini, walaupun tidak dengan nama 'beku' tetapi kemasan python sangat aneh, sehingga saya terperangah bahwa alat ini masuk akal. Pip 0.8.2, Python 2.7.
sumber
Sejak pip versi 1.3, Anda memiliki akses ke:
Yang tampaknya menjadi gula sintaksis untuk "pip freeze". Ini akan mendaftar semua modul khusus untuk instalasi Anda atau virtualenv, bersama dengan nomor versi mereka. Sayangnya itu tidak menampilkan nomor versi modul apa pun saat ini, juga tidak mencuci piring atau menyemir sepatu Anda.
sumber
pip list --local
untuk membedakan antaravirtualenv
paket situs global dan, dibahas di sini .pip list
adalah yang paling sederhana dan terbaik. Berikut adalah opsi dan detailnya.Di dalam
ipython
Anda dapat mengetik "import
Tab".Dalam juru bahasa Python standar, Anda bisa mengetikkan "
help('modules')
".Di baris perintah, Anda bisa menggunakan .
pydoc
modules
Dalam sebuah skrip, panggil
pkgutil.iter_modules()
.sumber
pkgutil.iter_modules()
berfungsi, solusi pip di atas tidak mencantumkan semua paket, hanya yang diinstal melalui pip.python -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]'
. Seharusnya membuang semua nama modul sebagai satu daftar Python yang sangat besar. Thex[1]
bit digunakan untuk memetik nama modul dari tuple yang dihasilkan olehpkgutil.iter_modules()
.Saya hanya menggunakan ini untuk melihat modul yang sedang digunakan:
yang menunjukkan semua modul berjalan di python Anda.
Untuk semua modul bawaan gunakan:
Yaitu dict yang berisi semua modul dan objek impor.
sumber
pydoc
ataupip
menginstal (NAS dalam kasus saya).help('modules')
hanya hang tanpa respons untukku. Tetapi pendekatan inisys
bekerja dengan sempurnaDalam shell biasa gunakan saja
sumber
py -m pydoc modules
dalam cmd atau Powershell.pydoc modules
tidak bekerja untuk saya di Windows 10 dengan Python 3.6, tetapi modifikasi @VKK:py -m pydoc modules
tidak bekerja di cmd / Powershell.Pada pip 10, jawaban yang diterima tidak akan berfungsi lagi. Tim pengembangan telah menghapus akses ke
get_installed_distributions
rutinitas. Ada fungsi alternatif dalamsetuptools
untuk melakukan hal yang sama. Berikut ini adalah versi alternatif yang berfungsi dengan pip 10:Tolong beri tahu saya jika itu juga akan atau tidak berfungsi di versi sebelumnya dari pip.
sumber
pip freeze
; kedalaman pengetahuan saya tentang topik ini agak terbatas. Saya agak meraba-raba mencari solusi ketika jawaban yang diterima tidak bekerja untuk saya dan saya mencoba menggabungkannya dengan jawaban yang terkaitsetuptools
dan membuatnya bekerja.get_installed_distributions routine
.setuptools
.Jika kita perlu mendaftar paket yang diinstal di shell Python, kita dapat menggunakan
help
perintah sebagai berikutsumber
Saya biasanya menggunakan
pip list
untuk mendapatkan daftar paket (dengan versi).Ini bekerja di lingkungan virtual juga, tentu saja. Untuk menunjukkan apa yang diinstal hanya dalam lingkungan virtual (bukan paket global), gunakan
pip list --local
.Berikut dokumentasi yang menunjukkan semua
pip list
opsi yang tersedia , dengan beberapa contoh bagus.sumber
Pencarian sangat sederhana menggunakan pkgutil.iter_modules
sumber
for m in iter_modules()
dan itu berhasil juga.di windows, Masukkan ini dalam cmd
sumber
Saya bertemu dengan python 2.7 yang diinstal khusus pada OS X. Diperlukan X11 untuk mendaftar modul yang diinstal (keduanya menggunakan bantuan dan pydoc).
Untuk dapat mendaftar semua modul tanpa menginstal X11 saya menjalankan pydoc sebagai http-server, yaitu:
Maka mungkin untuk mengarahkan Safari
http://localhost:12345/
untuk melihat semua modul.sumber
Coba ini
atau
sumber
Ini akan membantu
Di terminal atau IPython, ketik:
kemudian
sumber
Solusi ini primer berdasarkan pada modul
importlib
danpkgutil
dan bekerja dengan CPython 3.4 dan CPython 3.5, tetapi tidak memiliki dukungan untuk CPython 2.Penjelasan
sys.builtin_module_names
- beri nama semua modul bawaan (lihat jawaban saya di sini )pkgutil.iter_modules()
- mengembalikan informasi tentang semua modul yang tersediaimportlib.util.find_spec()
- mengembalikan informasi tentang mengimpor modul, jika adaBuiltinImporter
- importir untuk modul bawaan ( dokumen )SourceFileLoader
- importir untuk modul Python standar (secara default memiliki ekstensi * .py) ( docs )ExtensionFileLoader
- importir untuk modul sebagai pustaka bersama (ditulis pada C atau C ++)Kode lengkap
Pemakaian
Untuk CPython3.5 (terpotong)
Untuk CPython3.4 (terpotong)
sumber
pip
- sistem manajemen paket yang digunakan untuk menginstal dan mengelola paket perangkat lunak yang ditulis dengan Python dan hasilnyapip.get_installed_distributions()
mengembalikan modul yang diinstal dengan pip. Jawaban saya sepenuhnya didasarkan pada pustaka standar Python dan mencakup semua modul yang tersedia untuk impor. Kelemahan terbesar jawaban saya - tidak ada dukungan untuk CPython 2.**truncated**
, di mana output terpotong. Mungkin Anda tidak hati-hati, tetapi jika tidak, maka untuk mengirim saya informasi tentang sistem Anda dan implementasi Python, saya akan membuat riset tambahan untuk memperbaikinya.Peringatan: Adam Matan tidak menyarankan penggunaan ini dalam pip> 10.0. Juga, baca komentar @ sinoroc di bawah ini
Ini diilhami oleh jawaban Adam Matan (yang diterima):
yang kemudian mencetak tabel dalam bentuk
yang memungkinkan Anda dengan mudah membedakan paket mana yang Anda instal dengan dan tanpa
sudo
.Catatan samping: Saya perhatikan ketika saya menginstal paket sekali melalui
sudo
dan sekali tanpa, satu diutamakan sehingga yang lain tidak terdaftar (hanya satu lokasi ditampilkan). Saya percaya bahwa hanya yang ada di direktori lokal yang terdaftar. Ini bisa diperbaiki.sumber
pip
sekali dan kemudian keluar. Tampaknya lebih dari masalah yang bisa berubah perilaku._internal
). Semua dalam semua, itu jelas bekerja tetapi merupakan praktik yang buruk. Ada alternatif yang lebih baik, ada yang di jawaban lain untuk pertanyaan ini.Selain menggunakan
pip freeze
saya telah menginstal kuning telur di lingkungan virtual saya.sumber
Jika Anda memiliki distribusi python anaconda diinstal, Anda juga bisa menggunakan
selain solusi yang dijelaskan di atas.
sumber
conda install
, itu akan bekerja :)sys.modules
pip
), Anda dapat melihatnyapip.get_installed_distributions()
Untuk tujuan kedua, contoh kode:
sumber
/usr/bin/python
atau yang berasal dari python.org ? Untuk yang pertama, saya bisa menggunakansys.modules
tanpa masalah.system.modules
bukansys.modules
.Untuk Versi Terbaru Seperti Pip 20
Jalankan yang berikut ini di editor python atau IPython Anda
Baca jawaban lain dan kumpulkan kombinasi ini, yang tercepat dan termudah di dalam Python
sumber
pip freeze tidak semuanya menemukan paket namun seseorang dapat dengan mudah menulis perintah berikut untuk mendaftar semua path di mana paket python berada.
sumber
Ada banyak cara untuk menguliti kucing.
Cara paling sederhana adalah dengan menggunakan
pydoc
fungsi langsung dari shell dengan:pydoc modules
Tetapi untuk informasi lebih lanjut gunakan alat yang disebut pip-date yang juga memberi tahu Anda tanggal pemasangan.
pip install pip-date
sumber
Ada banyak ide, awalnya saya merenungkan dua hal ini:
pip
bantuan ('modul')
Saya membutuhkan pendekatan yang mudah, menggunakan perpustakaan dasar dan kompatibel dengan python 2.x lama
Dan saya melihat cahaya: listmodules.py
Tersembunyi di direktori sumber dokumentasi di 2.5 adalah skrip kecil yang mencantumkan semua modul yang tersedia untuk instalasi Python.
Pro:
sumber
Saya perlu menemukan versi spesifik paket yang tersedia secara default di AWS Lambda. Saya melakukannya dengan banyak ide dari halaman ini. Saya membagikannya untuk anak cucu.
Apa yang saya temukan adalah bahwa perpustakaan boto3 yang disediakan sudah ketinggalan zaman dan bukan salah saya bahwa kode saya gagal. Saya hanya perlu menambahkan boto3 dan botocore ke proyek saya. Tetapi tanpa ini saya akan membenturkan kepala saya berpikir kode saya buruk.
Apa yang saya temukan juga berbeda dari apa yang mereka terbitkan secara resmi . Pada saat penulisan ini:
sumber
Instalasi
Kode
Output sampel:
sumber
Berikut ini adalah solusi kode python yang akan mengembalikan daftar modul yang diinstal. Seseorang dapat dengan mudah memodifikasi kode untuk memasukkan nomor versi.
sumber
Bagi siapa pun yang bertanya-tanya cara menelepon
pip list
dari program Python, Anda dapat menggunakan yang berikut ini:sumber
Dari cangkang
Jika itu tidak membantu, Anda bisa melakukan ini.
Dan lihat apa yang menghasilkan.
sumber