[英]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路径中,它将您的子包(即utils
, engines
等)视为单独的包,这就是为什么它会给您一个错误,您尝试从中导入在进行相对导入时,在你的包之外,绝对导入不起作用,因为它找不到顶层项目目录,因为它不在任何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.