2017-11-28 11 views
1

질문이 있습니다.루트 및 하위 경로 모두에서 클래스를로드 할 수 있기를 원합니다.

내 파이썬 프로젝트 경로는 다음과 같습니다 : b.py.에서 code_sub의

 

    code_root 
    | 
    - code_sub 
    | |- b.py 
    | -- c.py 
    - a.py 

수입 c.py

그래서 code_root와 code_sub 경로 모두에서 b.py를로드 할 수 있기를 원합니다. 예를 들어

:

 

    code_root>$ python nlp.py 

또는

 

    code_root/code_sub>$ python b.py 

여기서 문제가 c.py.를 호출하는 것입니다

b.py은 다음과 같이 c.py 가져 오지해야합니다

 


    # b.py 
    import c 

 

그래서 난 내 솔루션을 발견했다.

아래와 같이 :

 


    from os.path import dirname 
    curpath = dirname(__file__) 

    if len(curpath) == 0: 
     curpath = '.' 
    c = imp.load_source('c', curpath+'/c.py') 

 

이 작동하지만 가장 좋은 방법은 아닌 것 같아. 똑같은 일을 수행하는 데 사용할 수있는 더 표준적인 파이썬 접근 방식이 있습니까?

답변

2

저는 보통 아래와 같이 프로젝트를 설정하고 가져 오기에 정규화 된 경로를 사용합니다. 또한 가상 환경을 사용하는 것이 좋습니다. 그런 다음 "add2virtualenv MyWorkinator, workinator"명령을 사용하여 가져 오기 작업을 훨씬 덜 복잡하게 만들 수 있습니다. c.py에서

MyWorkinator (Project level folder) 
    | 
    - workinator (All code here) 
     | 
     - package_a 
     | 
     - a1.py 
     - a2.py 
     - package_b 
     | 
     - b1.py 
     - b2.py 
     c.py 

:

import workinator.package_a.a1 
: b2.py에서

import workinator.package_b.b1