繁体   English   中英

Python导入结构

[英]Python imports structure

我希望我的项目有这个结构:

requirements.txt
README.md
.gitignore
project/
    __init__.py
    project.py
    core/
        __init__.py
        base.py
    engines/
        __init__.py
        engine1.py
        engine2.py
    utils/
        __init__.py
        refine_data.py
        whatever.py

该应用程序从project/project.py运行。 但是,在使用相对或绝对导入时,我经常会遇到导入错误。

两个引擎都需要从project.core.base导入,utils也需要从project.core.base导入,而project.py (主文件运行)需要能够从engines导入。

绝对导入不起作用:

# engines/engine1.py
from project.core.base import MyBaseClass

这给出了错误:

ImportError: No module named project.core.base

但是,如果我尝试相对导入而不是

# engines/engine1.py
from ..core.base import MyBaseClass

我明白了:

ValueError: Attempted relative import beyond toplevel package

我已经看到Github上的其他项目结构相似,但这似乎会引起各种各样的问题。 我如何让它工作?

看看你的sys.path 顶层project目录可能位于python路径中,它将您的子包(即utilsengines等)视为单独的包,这就是为什么它会给您一个错误,您尝试从中导入在进行相对导入时,在你的包之外,绝对导入不起作用,因为它找不到顶层项目目录,因为它不在任何python路径下。

顶部项目目录上方的目录是需要添加到python路径的目录。

防爆。

/path/is/here/project/core/...

# Add this to the PYTHONPATH
/path/is/here  

尝试使用这些导入:

engine1.py:

from core import base

refine_data.py:

from core import base

project.py

from engines import engine1

如果您使用pycharm标记项目目录作为源根目录,然后尝试运行project.py。 如果你不使用pycharm,你可以通过转到项目目录并运行命令来运行project.py:

python project.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM