从根文件夹导入python模块

时间:2020-01-17 13:14:23

标签: python python-import

我正在使用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')

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

1 个答案:

答案 0 :(得分:1)

我认为您的软件包实际上没有被称为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,可能就是您想要的?
  • 在pacakge(具有 init 和一堆子模块的目录)中,最好使用相对导入,例如如果util应该是同一个程序包的同级子模块,则应使用from . import abc

[0]对于Python 2而言实际上不是正确的,因为PEP 328必须保持旧的行为正常运行,但是无论如何您都想假设它,可以通过使用PEP中列出的__future__

相关问题