我的目录结构:
r/
|___init__.py
|
|_d1/
| |___init__.py
| |_s1.py
|
|_d2/
|___init__.py
|_s2.py
s1.py 的内容:
a = 1
print(a)
s2.py 的内容:
from d1.s1 import a
print(2 * a)
我导航到目录 /r
并执行 python3 d1/s1.py
。终端打印 1
。当我执行 python3 d2/s2.py
时,出现错误 ImportError: No module named 'd1'
。如何执行脚本s2
?
最佳答案
当你说,
from d1.s1 import a
Python 将首先查找名为 d1 的模块,然后在该模块中查找名为 s1 的模块,然后在其中查找名为 a 的对象(它可能是常规 python 对象或其他模块)。
所以,
from d1.s1 import a
可以以几种不同的方式工作:
-- d1/
-- __init__.py
-- s1.py <-- contains a variable called "a"
或
- d1/
-- __init__.py
-- s1/
-- __init__.py
-- a.py
或
-- d1/
| -- __init__.py
-- s1/
-- __init__.py <-- contains a variable called "a"
在您的情况下,init.py 仅在 d1 和 s1 以及 s2 位于同一目录中时才起作用。
如果要从另一个子目录d1导入模块s1,确保sys路径中的目录d1。
将d1添加到系统路径
sys.path.append('path_to_directory/d1')
关于python - 如何运行位于子目录中的脚本?导入错误 : No module named x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47948907/