如何运行位于子目录中的脚本? ImportError:没有名为x的模块

时间:2017-12-23 01:03:48

标签: python scripting directory

我的目录结构:

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

1 个答案:

答案 0 :(得分:1)

当你说,

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路径

sys.path.append('path_to_directory/d1')