我正在使用以下文件夹架构构建我的Python应用程序(大致遵循大纲here):
myapp:
myapp_service1:
myapp_service1_start.py
...
myapp_service2:
myapp_service2_start.py
...
myapp_service3:
myapp_service3_start.py
...
common:
myapp_common1.py
myapp_common2.py
myapp_common3.py
...
scripts:
script1.py
script2.py
script3.py
...
tests:
...
docs:
...
LICENSE.txt
MANIFEST.in
README
这对我来说是理想的文件/文件夹层次结构,但是,我对如何从外部文件夹引用模块感到困惑。例如,myapp_service1_start.py
需要引用myapp_common1.py
和myapp_common2.py
中的函数。
我知道我需要以某种方式添加对系统path
或pythonpath
的引用,但我不确定在代码中执行此操作的最佳方法。或者更确切地说,我甚至会在代码中执行此操作。
我该怎么做?
我已经看过很多关于通过pip
创建一个完整的Python软件包来安装的帖子,但这对我来说似乎有些过分。
答案 0 :(得分:2)
一种方法是让每个myapp_service*_start.py
文件将myapp/
目录添加到sys.path
。
例如,将名为import_me.py
的文件放入myapp_service1/
,其代码将“one up”目录(相对于导入文件)附加到sys.path
:
import os
import sys
import inspect
this_dir = os.path.dirname(inspect.getfile(inspect.currentframe()))
src_dir = os.path.join(this_dir, '..')
sys.path.insert(0, src_dir)
然后,在您的myapp_service1_start.py
中,您可以执行以下操作:
import import_me
from common import myapp_common1
from common import myapp_common2
当然,请务必通过将common
文件放入其中来使__init__.py
目录成为Python包。