我使用 importlib.import_module() 从不同的文件夹导入模块,但它只识别顶级目录名称。这是我的环境。测试中有三个文件夹 a、b、c
我习惯 importlib.import_module()
从不同的文件夹导入模块,但它只识别顶级目录名称。这是我的环境。
test目录下有a、b、c三个文件夹
(py312) root@ubuntu2004-host:~# tree test/
test/
a
aa
aaa
aaaa
a.py
b
c
cxxx.py
6 directories, 2 files
a.py的代码如下
import importlib
import sys
print(sys.path)
params=importlib.import_module('c.cxxx')
params.args
params.C
c.py的代码如下
args = {'a': 1}
class C:
def C(self):
pass
执行a.py的时候总是报错 ModuleNotFoundError: No module named 'c'
,意思是识别的是目录c,而不是模块cxxx
(py312) root@ubuntu2004-host:~/test# python3.12 a/a.py
['/root/test/a', '/usr/lib/python312.zip', '/usr/lib/python3.12', '/usr/lib/python3.12/lib-dynload', '/usr/local/lib/python3.12/dist-packages', '/usr/lib/python3/dist-packages']
Traceback (most recent call last):
File "/root/test/a/a.py", line 5, in <module>
params=importlib.import_module('c.cxxx')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/importlib/__init__.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1324, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'c'
原来的python版本是3.11。我也尝试了Python 3.12.4和3.8,但它们也给出了同样的错误。