두 개의 Python 모듈에는 서로의 내용이 필요합니다. 작동할 수 있습니까?
다음 줄이 있는 Bottle 웹 서버 모듈이 있습니다.
from foobar.formtools import auto_process_form_insert
그리고 foobar.formtools
모듈에는 다음 줄이 포함되어 있습니다.
from foobar.webserver import redirect, redirect_back
물론 둘 다 다음과 같은 오류가 발생합니다(각각).
ImportError: 이름 auto_process_form_insert를 가져올 수 없습니다.
ImportError: 이름 리디렉션을 가져올 수 없습니다.
단순히 파이썬에서 두 개의 모듈이 서로를 가져올 수 없고 모든 모듈 가져오기가 본질적으로 계층적이어야 한다는 사실입니까, 아니면 제가 뭔가 잘못하고 있습니까? 또는 이러한 모든 멋진 기능을 새 모듈에 배치하지 않는 해결 방법이 있습니까?
모듈 은 주기적으로 서로 를 가져올 수 있지만 문제가 있습니다. 간단한 경우에는 import
명령문을 파일 맨 아래 로 이동 하거나 from
구문을 사용하지 않는 방식으로 작동해야 합니다.
작동하는 이유는 다음과 같습니다.
모듈을 가져올 때 Python은 먼저 sys.modules
. 거기에 있으면 거기에서 가져옵니다. 없는 경우 정상적인 방법으로 가져오려고 합니다. 기본적으로 파일을 찾고 그 안의 내용을 실행합니다.
모듈을 실행하면 모듈의 내용이 채워집니다. 예를 들어, 창의적으로 명명된 이 모듈이 있다고 가정해 보겠습니다 example_opener
.
import webbrowser
def open_example():
webbrowser.open('http://www.example.com/')
처음에는 모듈이 비어 있습니다. 그런 다음 Python은 다음을 실행합니다.
import webbrowser
그 이후에는 모듈에만 webbrowser
. 그런 다음 Python은 다음을 실행합니다.
def open_example():
webbrowser.open('http://www.example.com/')
파이썬은 open_example
. 이제 모듈에는 webbrowser
및 가 포함 open_example
됩니다.
webbrowser
다음 코드가 포함되어 있다고 가정해 보겠습니다 .
from example_opener import open_example
def open(url):
print url
example_opener
먼저 수입 된다고 합니다 . 다음 코드가 실행됩니다.
import webbrowser
webbrowser
아직 가져오지 않았으므로 Python은 다음 내용을 실행합니다 webbrowser
.
from example_opener import open_example
example_opener
이는 가져 왔지만 아직 완전히 실행되지되었다. 파이썬은 상관하지 않습니다. 파이썬은 모듈을 sys.modules
. 이 시점에서 example_opener
여전히 비어 있습니다. open_example
아직 정의 되지 않았으며 가져오기도 완료되지 않았습니다 webbrowser
. Python은 open_example
에서 찾을 수 없으므로 example_opener
실패합니다.
우리가 수입하는 경우 open_example
의 끝에서 webbrowser
와 webbrowser
의 끝에서 example_opener
? Python은 다음 코드를 실행하여 시작합니다.
def open_example():
webbrowser.open('http://www.example.com/')
webbrowser
아직 존재하지 않지만 open_example
가 호출 될 때까지는 중요하지 않습니다 . 이제 example_opener
만 포함합니다 open_example
. 그런 다음 다음을 실행합니다.
import webbrowser
아직 가져오지 않았으므로 Python이 실행 webbrowser
됩니다. 시작하다:
def open(url):
print url
정의합니다 open
. 그런 다음 다음을 실행합니다.
from example_opener import open_example
example_opener
is in sys.modules
, so it uses that. example_opener
contains open_example
, so it succeeds. Python finishes importing webbrowser
. That concludes importing webbrowser
from example_opener
. That's the last thing in example_opener
, so the import of example_opener
finishes, successful, as well.
Don't do from ... import ...
. Just do import ...
and reference its objects using the module name.
ReferenceURL : https://stackoverflow.com/questions/11698530/two-python-modules-require-each-others-contents-can-that-work
'IT이야기' 카테고리의 다른 글
runST 및 함수 구성 (0) | 2021.09.23 |
---|---|
바이트 대신 Enum Int32의 기본 유형을 만들어야 하는 이유 (0) | 2021.09.23 |
로컬 maven 저장소 생성 (0) | 2021.09.22 |
Julia .jl 파일 실행 (0) | 2021.09.22 |
Google 캘린더 렌더링 작업 템플릿 매개변수 문서 (0) | 2021.09.22 |