2016-10-30 5 views
1

python으로 모듈을 가져 오는 데 몇 가지 문제가 있습니다. 이것은 내가 내 app.py에서이 기능__init__.py에서 가져 오기 방법

def want_to_be_run_elsewhere(): 
    pass 

을 내 루트 __init__.py에서 내 폴더 구조

my_app/ 
    app.py 
    __init__.py (I want to import a function from this file) 
    folder1/ 
     __init.py 
     method1.py 
    folder2/ 
     __init__.py 
     method.py 

, 나는이 기능을 가져오고 내 응용 프로그램을 시작할 때를 게재하고 싶지만 그것을하는 방법을 모르겠습니다.

from my_app import want_to_be_run_elsewhere 

이것은가을 my_app 내가 무엇을 말할 수에서

라는 이름의 모듈 발생하지 않습니다, 나는 필요한 모든 __init__.py 파일은, 어쩌면 그것은 sys.path에 관련 될 수있다?

여기에 비슷한 스레드를 읽었지만 해결할 수 없었습니다. 당신이 app.py를 호출하기 때문에

+0

'my_app /'안에'app.py'와'__init __. py'가 있습니까? –

+0

죄송합니다. 예'app.py'와'__init __. py'는 my_app/안에 있고,'app.py'는 내 진입 점입니다. –

+0

FWIW,'__init __. py' 파일 안에 함수를 정의하는 것은 흔한 일이 아닙니다. 그것들은 보통 비어 있거나 단지'__all__'리스트를 가지고 있습니다. –

답변

0

보통, 여기에 작동하지 않습니다

from . import want_to_be_run_elsewhere 

이 같은 가져 오기를 할 것입니다. my_app.app을 가져 오면 해당 모듈의 일부입니다. 당신이 그것을 부르면 그렇지 않습니다. .을 사용중인 모듈에서 가져 오기가 작동하지 않습니다.

app.pymy_app 외부로 이동하여 모듈에서 제거하고 가져 오기를 다시 수행 할 수 있습니다.

아니면 app.py

from __init__ import want_to_be_run_elsewhere 

을 사용할 수 있습니다 나는 당신이 실제로 pip install -e my_app/이있는 경우

from my_app import want_to_be_run_elsewhere 

에만 작동합니다 생각합니다. 그렇다면 그것은 또한 작동해야합니다.

+0

또는 패키지의 모듈로'app.py'를 호출하십시오 : 위의 dir ** ** my_app'에서'python -m my_app.app' 또는'python3 -m my_app.app '. http://stackoverflow.com/a/11536794/674064 –

+0

흥미 롭습니다. 이 시도해야합니다 –

+1

'__init__ 가져 오기 ...'사용 제안을 제거합니다. 그것은 일을하는 올바른 방법이 아닙니다. 하위 모듈의 일부 코드가 패키지 이름에 의존하는 경우 (예 : 'pickle'과 같은 모듈을 사용하거나 해당 솔루션을 사용하는 'shleve'등으로 데이터를 읽을 수 없게되는 경우) 코드를 중단 할 수도 있습니다. – Bakuriu

관련 문제