正在从根文件夹导入 python 个模块

Importing python modules from root folder

我正在使用 python 2.7 并具有以下项目结构

main-folder

    --folder1
        - script.py

    --folder2
        - scr.py

    -- abc.py
    -- util.py

我正在尝试使用

将abc.py导入util.py
from main-folder import abc

但我没有收到如下错误

ImportError: No module named main-folder

我还尝试将主文件夹的路径附加到使用

的路径
sys.path.append(r'path/to main-folder/main-folder')

我也有 init.py 在主文件夹,folder1 和 folder2

我假设你的包实际上没有被调用 main-folder 因为这是一个语法错误。

  • sys.path / PYTHONPATH 是 Python 查找 模块的地方,因此将文件夹添加到 sys.path 意味着 中它可以导入(作为顶级模块),它不会使文件夹本身可导入
  • 当您 运行 脚本作为 Python 文件时,Python 添加 该文件的文件夹 在 PYTHONPATH 中,例如在这里,如果你 运行 main-folder/folder1/script.py,main-folder/folder1 是你的 PYTHONPATH 上的内容,显然无论你如何切片它都无法访问 abc 或 utils
  • import <foo>from <foo> import <bar> 是一个 绝对导入 ,它从 PYTHONPATH[0]
  • 开始搜索
  • 您可以在命令行中指定 PYTHONPATH,例如PYTHONPATH=. python main-folder/folder1/script.py will *also* add whatever .` 是你的 PYTHONPATH,这可能是你想要的?
  • 在一个包中(一个包含 __init__ 和一堆子模块的目录),使用相对导入可能更好,例如util 应该使用 from . import abc 如果它们应该是同一包的同级子模块

[0] 对于 Python 2 实际上并非如此,因为 PEP 328 必须保持旧的行为有效,但您可能想要假设它无论如何,您可以“选择退出”使用 PEP

中列出的 __future__ 节的旧行为