在我们公司,我们使用python进行各种项目。我希望我们的代码更加清晰和可读,并且已经改变了一些东西以跟随PEP8。我们有一些共同的模块在这些项目之间共享,我们在'library'包中由多个使用项目。这是基本的层次结构:
src_py\
lib\
sharedmodule1.py
...
ProjectA\
...
ProjectB\
...
ProjectC\
helper\
helpermodule1.py
...
converter\
base.py
...
runprojectc.py
我正在使用ProjectC,我想在base.py和runprojectc.py中导入sharedmodule1.py。做这个的最好方式是什么。相对进口?绝对导入?重新构建我们的项目结构?
现在我觉得导入lib包的最好(最pythonic)方法是使用相对导入,但从我的读数来看,它是非常气馁的(PEP328)。我经常在类似问题上发布的解决方案是使用绝对导入并修改sys.path以包含父目录(这就是我们现在正在做的事情)。我对此说的是......“必须有更好的方式”。
目前我们的进口看起来像这样(非常丑陋和令人困惑):
# runprojectc.py
curdir = os.path.dirname(__file__)
sys.path.insert(0, os.path.abspath(os.path.join(curdir, '..', 'lib')))
import sharedmodule1.py
或者我们可以做(清洁):
# runprojectc.py
sys.path.insert(0, '..')
from lib import sharedmodule1.py
或亲戚:
# runprojectc.py
from .lib import sharedmodule1.py
我想要一些干净而又“社区可接受的”。我很想听到一些想法!