Saya perlu tahu apakah ada modul python, tanpa mengimpornya.
Mengimpor sesuatu yang mungkin tidak ada (bukan yang saya inginkan):
try:
import eggs
except ImportError:
pass
python
python-import
yarbelk
sumber
sumber
Jawaban:
Python2
Untuk memeriksa apakah impor dapat menemukan sesuatu di python2, gunakan
imp
Untuk menemukan impor bertitik, Anda perlu melakukan lebih banyak:
Anda juga dapat menggunakan
pkgutil.find_loader
(kurang lebih sama dengan bagian python3Python3
Python3 ≤ 3.3
Anda harus menggunakan
importlib
, Bagaimana saya melakukan ini adalah:Harapan saya adalah, jika Anda dapat menemukan loader untuknya, maka itu ada. Anda juga bisa sedikit lebih pintar tentangnya, seperti memfilter loader apa yang akan Anda terima. Sebagai contoh:
Python3 ≥ 3.4
Dalam Python3.4
importlib.find_loader
dokumen python sudah tidak digunakan lagiimportlib.util.find_spec
. Metode yang disarankan adalahimportlib.util.find_spec
. Ada yang lain sukaimportlib.machinery.FileFinder
, yang berguna jika Anda mencari file tertentu untuk memuat. Mencari tahu bagaimana menggunakannya adalah di luar cakupan ini.Ini juga berfungsi dengan impor relatif tetapi Anda harus menyediakan paket awal, sehingga Anda juga bisa melakukan:
Meskipun saya yakin ada alasan untuk melakukan ini - saya tidak yakin apa yang akan terjadi.
PERINGATAN
Ketika mencoba menemukan submodule, itu akan mengimpor modul induk (untuk semua metode di atas)!
komentar selamat datang untuk menyiasati ini
Ucapan Terima Kasih
find_loader
sumber
eggs.ham.spam
.spam
dieggs.ham
Anda akan menggunakanimp.find_module('spam', ['eggs', 'ham'])
imp
yang usang dalam mendukungimportlib
Python 3.pkgutil.find_loader("my.package.module")
mengembalikan loader jika paket / modul ada danNone
jika tidak. Harap perbarui jawaban Anda untuk Python 2, karena menyembunyikan ImportError membuat saya gila kemarin xPSetelah menggunakan respons yarbelk, saya membuat ini untuk tidak harus mengimpor
ìmp
.Berguna dalam Django
settings.py
misalnya.sumber
Python 3> = 3.6: ModuleNotFoundError
The
ModuleNotFoundError
telah diperkenalkan di python 3.6 dan dapat digunakan untuk tujuan iniKesalahan muncul ketika modul atau salah satu dari orang tuanya tidak dapat ditemukan. Begitu
akan mencetak pesan yang terlihat seperti
No module named 'eggs'
jikaeggs
modul tidak dapat ditemukan; tetapi akan mencetak sesuatu sepertiNo module named 'eggs.sub'
jika hanyasub
modul tidak dapat ditemukan tetapieggs
paket dapat ditemukan.Lihat dokumentasi sistem impor untuk info lebih lanjut tentang
ModuleNotFoundError
sumber
Python 2, tanpa mengandalkan ImportError
Sampai jawaban saat ini diperbarui, berikut adalah cara untuk Python 2
Mengapa ada jawaban lain?
Banyak jawaban memanfaatkan penangkapan
ImportError
. Masalahnya adalah, kita tidak bisa tahu apa yang melemparImportError
.Jika Anda mengimpor Anda punah modul dan kebetulan ada seorang
ImportError
dalam modul Anda (misalnya kesalahan ketik pada baris 1), hasilnya akan bahwa modul Anda tidak ada. Ini akan membawa Anda cukup banyak mundur untuk mengetahui bahwa modul Anda ada danImportError
tertangkap dan membuat semuanya gagal diam-diam.sumber
ImportError
- harap edit jika tidak jelas bagi Anda.jawaban go_as sebagai satu baris
sumber
Saya menemukan pertanyaan ini ketika mencari cara untuk memeriksa apakah modul dimuat dari baris perintah dan ingin berbagi pemikiran saya untuk yang datang setelah saya dan mencari yang sama:
Metode file skrip Linux / UNIX : buat file
module_help.py
:Kemudian pastikan itu dapat dieksekusi:
chmod u+x module_help.py
Dan menyebutnya dengan
pipe
untukgrep
:Metode interaktif : di konsol memuat
python
Jika ditemukan berhenti membaca dengan mengetik
q
Untuk keluar dari sesi interaktif python, tekan Ctrl+D
Metode file skrip Windows juga kompatibel dengan Linux / UNIX, dan secara keseluruhan lebih baik :
Memanggilnya dari perintah seperti:
Akan menghasilkan:
dan Anda harus menekan
q
untuk keluar dari mode interaktif.Menggunakannya modul tidak dikenal:
Akan menghasilkan:
dan keluar.
sumber
Gunakan salah satu fungsi dari pkgutil , misalnya:
sumber
Pernyataan if yang lebih sederhana dari AskUbuntu: Bagaimana cara saya memeriksa apakah suatu modul dipasang dengan Python?
sumber
Anda bisa menulis skrip kecil yang akan mencoba mengimpor semua modul dan memberi tahu Anda mana yang gagal dan mana yang berfungsi:
Keluaran:
Kata peringatan ini akan mencoba mengimpor semuanya sehingga Anda akan melihat hal-hal seperti
PyYAML failed with error code: No module named pyyaml
karena nama impor sebenarnya hanya yaml. Jadi selama Anda tahu impor Anda ini harus melakukan trik untuk Anda.sumber
Saya menulis fungsi pembantu ini:
sumber
Anda juga bisa menggunakannya
importlib
secara langsungsumber
Tidak ada cara untuk secara andal memeriksa apakah "modul bertitik" dapat diimpor tanpa mengimpor paket induknya. Mengatakan ini, ada banyak solusi untuk masalah "bagaimana memeriksa apakah modul Python ada".
Solusi di bawah mengatasi masalah bahwa modul yang diimpor dapat meningkatkan ImportError meskipun ada. Kami ingin membedakan situasi itu dari yang modulnya tidak ada.
Python 2 :
Python 3 :
sumber
dalam django.utils.module_loading.module_has_submodule
sumber