Uji nama modul dalam sys.moduleskamus :
import sys
modulename = 'datetime'
if modulename not in sys.modules:
print 'You have not imported the {} module'.format(modulename)
Dari dokumentasi:
Ini adalah kamus yang memetakan nama modul ke modul yang telah dimuat.
Perhatikan importpernyataan itu melakukan dua hal:
- jika modul belum pernah diimpor sebelumnya (== tidak ada di
sys.modules ), maka akan dimuat dan ditambahkan ke sys.modules.
- Ikat 1 atau beberapa nama di namespace saat ini yang mereferensikan objek modul atau objek yang merupakan anggota namespace modul.
Ekspresi modulename not in sys.modulesmenguji apakah langkah 1 telah dilakukan. Menguji hasil dari langkah 2 memerlukan mengetahui importpernyataan persis apa yang digunakan saat mereka menetapkan nama yang berbeda untuk mereferensikan objek yang berbeda:
import modulename set modulename = sys.modules['modulename']
import packagename.nestedmoduleset packagename = sys.modules['packagename'](tidak peduli berapa banyak level tambahan yang Anda tambahkan)
import modulename as altname set altname = sys.module['modulename']
import packagename.nestedmodule as altname set altname = sys.modules['packagename.nestedmodule']
from somemodule import objectname set objectname = sys.modules['somemodule'].objectname
from packagename import nestedmodulenameset nestedmodulename = sys.modules['packagename.nestedmodulename'](hanya jika tidak ada objek yang bernama nestedmodulenamedalam packagenamenamespace sebelum impor ini, nama tambahan untuk modul bersarang ditambahkan ke namespace paket induk pada saat ini)
from somemodule import objectname as altname set altname = sys.modules['somemodule'].objectname
from packagename import nestedmodulename as altnameset altname = sys.modules['packagename.nestedmodulename'](hanya jika tidak ada objek yang bernama nestedmodulenamedalam packagenamenamespace sebelum impor ini, nama tambahan untuk modul bersarang ditambahkan ke namespace paket induk pada saat ini)
Anda dapat menguji apakah nama yang mengikat objek yang diimpor ada di namespace tertentu:
'importedname' in dir()
'importedname' in globals()
'importedname' in globals(sys.modules['somemodule'])
Ini hanya memberi tahu Anda nama yang ada (telah terikat), bukan jika itu merujuk ke modul atau objek tertentu dari modul itu. Anda dapat lebih jauh melakukan introspeksi objek itu atau menguji apakah itu objek yang sama dengan yang tersedia di sys.modules, jika Anda perlu mengesampingkan bahwa nama telah disetel ke sesuatu yang lain sepenuhnya sejak saat itu.
raise SystemError()(atau pengecualian lain pilihan Anda) di bagian atas modul yang tidak ingin Anda impor. Jika Anda benar - benar mengimpornya ke suatu tempat, program Anda akan melakukan pelacakan dan keluar.