python - 如何运行位于子目录中的脚本?导入错误 : No module named x

标签 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

最佳答案

当你说,

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/

相关文章:

file - 删除EMPTY目录或文件夹/子文件夹

html - href ="../"链接到根而不是父目录

python - 递归以找到 Python 中集合之间的共性

python - 导入错误 : No module named _ssl

python - 在python中组合函数

c# - 让鼠标指针进行 super 跳跃?

shell - 如何在 cmd start 中使用引号?

linux - 通过保存来跟踪文件系统(文件夹/文件)状态

python - Tweepy Hipchat API - 除了速率限制?

linux - 按目录中的文件名删除重复文件(linux)