Saya ingin mengimpor foo-bar.py. Ini bekerja:
foobar = __import__("foo-bar")
Ini tidak:
from "foo-bar" import *
Pertanyaan saya: Apakah ada cara saya dapat menggunakan format di atas yaitu, from "foo-bar" import *
untuk mengimpor modul yang ada -
di dalamnya?
Jawaban:
kamu tidak bisa.
foo-bar
bukan pengenal. ganti nama file menjadifoo_bar.py
Sunting: Jika
import
bukan tujuan Anda (seperti pada: Anda tidak peduli dengan apa yang terjadisys.modules
, Anda tidak perlu mengimpornya sendiri), cukup memasukkan semua global file ke dalam cakupan Anda sendiri, Anda dapat menggunakanexecfile
sumber
execfile(fn)
menggunakanexec(open(fn).read())
Juga ada paket importlib.Jika Anda tidak dapat mengganti nama modul agar cocok dengan konvensi penamaan Python, buat modul baru untuk bertindak sebagai perantara:
sumber
foo_proxy.py
file, tetapkan output dari__import__(...)
kesys.modules['foo_proxy']
. Sebenarnya, jangan lakukan itu, itu ide yang buruk.Mulai dari Python 3.1, Anda dapat menggunakan importlib:
( https://docs.python.org/3/library/importlib.html )
sumber
Jika Anda tidak dapat mengganti nama file asli, Anda juga bisa menggunakan symlink:
Maka Anda bisa:
sumber
Seperti kata lain Anda tidak dapat menggunakan "-" dalam penamaan python, ada banyak solusi, salah satu solusi yang akan berguna jika Anda harus menambahkan beberapa modul dari jalur menggunakan
sys.path
Misalnya jika struktur Anda seperti ini:
sumber