Saya sedang mengerjakan dokumentasi (pribadi) untuk perpustakaan nested matplotlib (MPL), yang berbeda dari MPL sendiri yang disediakan, oleh paket submodule yang tertarik. Saya sedang menulis skrip Python yang saya harap akan mengotomatisasi pembuatan dokumen dari rilis MPL mendatang.
Saya memilih submodula / paket yang tertarik dan ingin mendaftar kelas utama mereka dari mana saya akan menghasilkan daftar dan memprosesnyapydoc
Masalahnya adalah bahwa saya tidak dapat menemukan cara untuk menginstruksikan Python untuk memuat submodule dari string. Ini adalah contoh dari apa yang saya coba:
import matplotlib.text as text
x = dir(text)
.
i = __import__('matplotlib.text')
y = dir(i)
.
j = __import__('matplotlib')
z = dir(j)
Dan berikut adalah perbandingan 3 cara daftar di atas melalui sidik jari:
Saya tidak mengerti apa yang dimuat di y
objek - itu basis matplotlib
ditambah sesuatu yang lain, tetapi tidak memiliki informasi yang saya inginkan dan itu adalah kelas utama dari matplotlib.text
paket. Bagian berwarna biru teratas pada tangkapan layar (x
daftar)
Tolong jangan menyarankan Sphinx sebagai pendekatan yang berbeda.
sumber
__import__(str)
daripada standarimport
?import
pernyataan tersebut. Inilah salah satu contoh penggunaan: djangosnippets.org/snippets/3048Jawaban:
The
__import__
Fungsi dapat sedikit sulit untuk memahami.Jika Anda berubah
untuk
kemudian
i
akan merujuk kematplotlib.text
.Di Python 2.7 dan Python 3.1 atau yang lebih baru, Anda bisa menggunakan
importlib
:Beberapa catatan
Jika Anda mencoba mengimpor sesuatu dari sub-folder misalnya
./feature/email.py
, kodenya akan terlihat sepertiimportlib.import_module("feature.email")
Anda tidak dapat mengimpor apa pun jika tidak ada
__init__.py
dalam folder dengan file yang Anda coba imporsumber
importlib
harus tersedia pada pypi untuk <python2.7./feature/email.py
) kode akan terlihat sepertiimportlib.import_module("feature.email")
__init__.py
dalam folder dengan file yang Anda coba impor.import moduleName
tempat moduleName adalah string. Bagaimana denganfrom moduleName import *
?importlib.import_module
adalah apa yang kamu cari. Ini mengembalikan modul yang diimpor. (Hanya tersedia untuk Python> = 2.7 atau 3.x):Setelah itu Anda dapat mengakses apa pun di modul seperti
mymodule.myclass
, dll.sumber
imp.load_source(..)
menggunakanimp
modul seperti yang disarankan dalam jawaban ini stackoverflow.com/questions/67631/…import moduleName
tempat moduleName adalah string. Bagaimana denganfrom moduleName import *
?menghabiskan beberapa waktu mencoba mengimpor modul dari daftar, dan ini adalah utas yang membuat saya hampir sampai ke sana - tapi saya tidak memahami penggunaan ___import____ -
jadi inilah cara mengimpor modul dari sebuah string, dan mendapatkan perilaku yang sama seperti hanya mengimpor. Dan coba / kecuali kasus kesalahan juga. :)
dan ya, untuk python 2.7> Anda memiliki opsi lain - tetapi untuk 2,6 <, ini berfungsi.
sumber
Saya mengembangkan 3 fungsi bermanfaat ini:
Dan setiap kali saya ingin memuat ulang instance baru, saya hanya perlu memanggil getInstance () seperti ini:
Akhirnya saya bisa memanggil semua fungsi di dalam Mesin Virtual baru:
Satu-satunya kekhususan di sini adalah untuk menyesuaikan daftar params (param1, param2, param3) dari instance Anda.
sumber
Selain menggunakan yang
importlib
juga dapat menggunakanexec
metode untuk mengimpor modul dari variabel string.Di sini saya menunjukkan contoh mengimpor
combinations
metode dariitertools
paket menggunakanexec
metode:Keluaran:
sumber