从另一个目录导入

时间:2014-01-29 16:38:50

标签: python import directory pythonpath package-managers

我正在使用以下文件夹架构构建我的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.pymyapp_common2.py中的函数。

我知道我需要以某种方式添加对系统pathpythonpath的引用,但我不确定在代码中执行此操作的最佳方法。或者更确切地说,我甚至会在代码中执行此操作。

我该怎么做?

我已经看过很多关于通过pip创建一个完整的Python软件包来安装的帖子,但这对我来说似乎有些过分。

1 个答案:

答案 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包。