2012-05-17 5 views
4

내 코드 (핵심 모듈과 공통 디렉토리에있는 일부 애플 리케이션)를 리펙토링하려고합니다. 나는이 구조 AppOne.py, AppTwo.pyAppThree.py이 모듈 Core 패키지 a, bc를 가져파이썬 패키지를 작성하는 방법

Root 
    __init__.py 
    Core 
     __init__.py 
     a.py 
     b.py 
     c.py 
    AppOne 
     __init__.py 
     AppOne.py 
    AppTwo 
     __init__.py 
     AppTwo.py 
    AppThree 
     __init__.py 
     AppThree.py 

을 싶어.

__init__.py 파일 및 가져 오기 문을 작성하는 방법을 모르겠다. 나는 http://docs.python.org/tutorial/modules.htmlhttp://guide.python-distribute.org/creation.html을 읽었습니다. "비 패키지에서 상대 가져 오기 시도"또는 "유효하지 않은 Sintaxis"와 같은 오류가 있습니다.

+4

당신이 비워 (.은'__init __ py')을 남길 수 있습니다 그것은 작동합니다 . 특별한 특별한 요구 사항이 있다면 (즉, 사물을 숨기고 싶을 때) 무언가를 넣기 만하면됩니다. –

답변

4

sys 경로에 파이썬 모듈의 디렉토리를 추가해야합니다.

당신이 AppOne.py 내

//here_using_your_module.py 
import os, sys 

abspath = lambda *p: os.path.abspath(os.path.join(*p)) 

PROJECT_ROOT = abspath(os.path.dirname(__file__)) 

sys.path.insert(0,PROJECT_ROOT) 

import a from my_module 

a.do_something() 
+0

이것은 중요한 부분입니다! 고맙습니다. 나는 sys.path를 업데이트하는 것을 잊었다. –

1

sys_path 당신에게 모듈 디렉토리를 추가해야이

Root 
    here_using_my_module.py 
    my_module 
     __init__.py --> leave it empty 
     a.py 
     b.py 
     c.py 

같은 경우 : 또는

import os 
os.chdir("..") 

from Core import a 

을, 당신이 쓸 수 있습니다 AppOne.py :

import sys 
sys.path.insert(-1,"..") 

from Core import a 
1

당신은 정확한 디렉토리 구조, 상위 폴더에서 가져 상대의 수입을 사용할 수있는 경우 :

from ..Core import a 
관련 문제