动态导入模块导致 ImportError
Dynamic importing modules results in an ImportError
所以我一直在尝试制作一个简单的程序,它将动态导入具有特定名称的文件夹中的模块。我用 os
cd 到目录,我 运行 module = __import__(module_name)
因为我在一个 for 循环中,所有描述的文件名都被迭代到变量 module_name.
我唯一的问题是我遇到了:
ImportError: No module named "module_name"
(说出我作为字符串给出的变量的名称)。该文件存在,它位于提到的目录中,并且 import
在同一目录中工作正常。但是正常的 even import 不适用于 cd 目录中的模块。代码如下所示。如果这是一个明显的问题,我很抱歉。
import os
class Book():
def __init__(self):
self.name = "Book of Imps"
self.moduleNames = []
# configure path
def initialize(self):
path = os.getcwd() + '/Imp-pit'
os.chdir(path)
cwd = os.walk(os.getcwd())
x, y, z = next(cwd)
# Build Modules
for name in z:
if name[:3] == 'Imp':
module_name = name[:len(name) - 3]
module = __import__(module_name)
def start_sim():
s = Book()
s.initialize()
if __name__ == '__main__':
start_sim()
我不认为解释器会动态更改 sys.path
如果您只是用 os.chdir
更改当前目录。您必须手动将 path
变量插入 sys.path
列表才能工作,即:
sys.path.insert(0, path)
Python一般在找模块的时候会搜索sys.path
,所以你在那里指定它就会找到。
补充说明;不要使用 __import__
,而是使用 importlib.import_module
. The interface is exactly the same but the second is generally advised in the documentation.
您应该使用 try-except 概念,例如:
try:
import csv
except ImportError:
raise ImportError('<error message>')
如果我没看错你就更正
try:
module = __import__(module_name)
except ImportError:
raise ImportError('<error message>')
所以我一直在尝试制作一个简单的程序,它将动态导入具有特定名称的文件夹中的模块。我用 os
cd 到目录,我 运行 module = __import__(module_name)
因为我在一个 for 循环中,所有描述的文件名都被迭代到变量 module_name.
我唯一的问题是我遇到了:
ImportError: No module named "module_name"
(说出我作为字符串给出的变量的名称)。该文件存在,它位于提到的目录中,并且 import
在同一目录中工作正常。但是正常的 even import 不适用于 cd 目录中的模块。代码如下所示。如果这是一个明显的问题,我很抱歉。
import os
class Book():
def __init__(self):
self.name = "Book of Imps"
self.moduleNames = []
# configure path
def initialize(self):
path = os.getcwd() + '/Imp-pit'
os.chdir(path)
cwd = os.walk(os.getcwd())
x, y, z = next(cwd)
# Build Modules
for name in z:
if name[:3] == 'Imp':
module_name = name[:len(name) - 3]
module = __import__(module_name)
def start_sim():
s = Book()
s.initialize()
if __name__ == '__main__':
start_sim()
我不认为解释器会动态更改 sys.path
如果您只是用 os.chdir
更改当前目录。您必须手动将 path
变量插入 sys.path
列表才能工作,即:
sys.path.insert(0, path)
Python一般在找模块的时候会搜索sys.path
,所以你在那里指定它就会找到。
补充说明;不要使用 __import__
,而是使用 importlib.import_module
. The interface is exactly the same but the second is generally advised in the documentation.
您应该使用 try-except 概念,例如:
try:
import csv
except ImportError:
raise ImportError('<error message>')
如果我没看错你就更正
try:
module = __import__(module_name)
except ImportError:
raise ImportError('<error message>')