2017-11-08 3 views
0

은 가정하자 나는 다음과 같은 프로젝트가 조직이 있습니다이해 파이썬 수입 시스템 및 프로젝트 구조

ProjectRoot/ 
    __init__.py 
    test.py 
    A/ 
     __init__.py 
     a_test.py 
    B/ 
     __init__.py 
     b_test.py 

을 그리고 a_test이 b_test에 의존한다는 것을 가정한다. 따라서 소스 코드는 비교적 간단합니다 :

# 
# a_test.py 
# 

from B.b_test import b_test_class 

class a_test_class: 
    def func(self): 
     print("a_test_class") 
     b_instance = b_test_class() 
     b_instance.func() 


if __name__ == "__main__": 
    a_instance = a_test_class() 
    a_instance.func() 

# 
# b_test.py 
# 

class b_test_class: 
    def func(self): 
     print("b_test_class") 

# 
# test.py 
# 

from A.a_test import a_test_class 

if __name__ == "__main__": 
    a_instance = a_test_class() 
    a_instance.func() 

test.py 스크립트를 실행하는 동안 모든 것이 의도 한대로 작동합니다. 파이썬은 문제없이 모든 모듈을로드하고 실행합니다. 이제 질문이옵니다 : 어떻게하면 test.py없이 a_test.py를 시작할 수 있습니까? 기본적으로, 내가 달성하고자하는 것은 projectRoot/A로 cd하고 a_test.py를 실행하는 것입니다. 이 ImportError를지고 결과가 없습니다 : 다음입니다

ProjectRoot/ 
    customLibModuleA/ 
     ... 
    customLibModuleB/ 
     ... 
    mainApp.py 

그리고 내가 무엇을 만들 수 있도록하려면 :

가 현재 나는 다음과 같은 구조의 프로젝트를 생성 할 수있었습니다 'B'라는 이름의 모듈을 :

ProjectRoot/ 
    customLibModuleA/ #custom protocol implementation 
     ... 
    customLibModuleB/ #custom logging functions 
     ... 
    application1/ #server 
     ... 
    application2/ #client 
     ... 

복잡한 프로젝트를 어떻게 관리해야합니까? 프로젝트 구조화 매뉴얼과 스타일 가이드에 대한 좋은 참고 자료는 환영합니다.

답변

0

아무도 파이썬 접근법을 제공하지 않았기 때문에 여기에 시간적 해결책이 있습니다.

폴더 구조는 다음과 같습니다

ProjectRoot/ 
    __init__.py 
    customLibModuleA/ #custom protocol implementation 
     __init__.py 
     ... 
    customLibModuleB/ #custom logging functions 
     __init__.py 
     ... 
    application1/ #server 
     __init__.py 
     __path_setup__.py 
     server.py 
     ... 
    application2/ #client 
     __init__.py 
     __path_setup__.py 
     client.py 
     ... 

__path_setup__.py 내용은 다음과 같습니다

import sys 
import os 

os.sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) 

응용 프로그램 스크립트 수입 앞의 몇 가지 설정 코드를 (server.py) :

# 
#settings up the environment 
# 
if __name__ == "__main__": 
    exec(open("./__path_setup__.py").read()) 

# 
# system and libraries imports 
# 
import customLibModuleA.whatever 
... 

하이트 이 문제에 대한 질 높은 pythonic 솔루션은 여전히 ​​환영 받고 있습니다.