【发布时间】:2017-08-11 22:16:04
【问题描述】:
嘿,我正在开发一个项目,该项目具有一组分层模块,其文件夹结构设置如下:
module_name/
__init__.py
constants.py
utils.py
class_that_all_submodules_need_access_to.py
sub_module_a/
__init__.py
sub_module_a_class_a.py
sub_module_a_class_b.py
useful_for_sub_module_a/
__init__.py
useful_class_a.py
useful_class_b.py
sub_module_b/
__init__.py
sub_module_b_class_a.py
sub_module_b_class_b.py
等等等等……
问题是,我不知道如何在 init.py 中设置导入,以便可以从 sub_module_a/useful_for_sub_module_a/useful_class_a.py 访问 class_that_all_submodules_need_access_to.py。
我已尝试在 Google/StackOverflow 上查找此内容,但我已经力不从心了。奇怪的是,PyCharm 的路径设置方式使我在 PyCharm 中处理项目时不会遇到此错误,而只会在其他环境中遇到此错误。
所以这是我想出的一个特别不雅的解决方案。我的 sub_module_a/useful_for_sub_module_a/init.py 看起来像:
import sys
import os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..')))
import module_name
这在 sub_module_*/ 中类似,其中不是 3 '..',而是只有两个(即 '..'、'..' 而不是 '..'、'..'、'..'对于上面的 sys.path.insert 行)。然后在 sub_module_a/useful_for_sub_module_a/useful_class_a.py 中,我必须像这样导入 module_name/constants.py(和其他):
import module_name.constants
from module_name.class_that_all_submodules_need_access_to import ImportantClass
虽然此解决方案有效,但我想知道是否有更好/更优雅的方式来设置导入和/或文件夹层次结构?我担心会为这个模块的用户弄乱 python 系统路径。这甚至是一个有效的担忧吗?
【问题讨论】:
标签: python import python-import