在此测试中,我创建一个新目录(如果已存在则将其删除),将其添加到
sys.path
,添加两个简单的Python文件,然后尝试导入它们。我正在使用 Python 3.11.6。
import sys
from pathlib import Path
from shutil import rmtree
d = Path('/tmp/fleen')
rmtree(d)
d.mkdir()
sys.path = [str(d)] + sys.path
(d / 'module1.py').write_text('x = 1')
import module1
assert module1.x == 1
(d / 'module2.py').write_text('x = 2')
print('file contains:', repr((d / 'module2.py').read_text()))
import module2
assert module2.x == 2
这会按预期打印
file contains: 'x = 2'
,但随后会引发
Traceback (most recent call last):
File "example.py", line 16, in <module>
import module2
ModuleNotFoundError: No module named 'module2'
发生什么事了?为什么
import
看不到文件? sys.path
中每个目录是否有某种需要清除的缓存?
您是否尝试将
__init__.py
文件添加到要从中导入的模块?
顺便说一句,您可以使用
sys.path.append(d)
代替 sys.path = [str(d)] + sys.path