2014-01-29 71 views
3

我用下面的文件夹结构构造我的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的引用,但我不确定在代码中执行此操作的最佳方式。或者甚至我甚至会在代码中做到这一点。

我该怎么做?

我已经看到了很多有关创建一个完整的Python包要通过安装pip职位的,但是这似乎有点小题大做了我。

回答

2

一种方法是让您的每个myapp_service*_start.py文件添加myapp/目录到sys.path

例如,一个名为import_me.py文件拖放到myapp_service1/与追加的“一补”目录(相对于导入文件)的代码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 

当然,一定要通过丢弃(可能为空)__init__.py文件到它做出common目录Python包。

+0

作品完美! – Brett