__init__.py에서 Python으로 파일 가져오기
문제
다음과 같은 구조가 있다고 가정합니다.
app/
__init__.py
foo/
a.py
b.py
c.py
__init__.py
a.py, b.py 및 c.py는 몇 가지 공통 가져오기(logging, os, re 등)를 공유합니다.이 3개 또는 4개의 공통 모듈을 다음에서 가져올 수 있습니까? __init__.py
파일을 저장하므로 모든 파일에서 가져올 필요가 없나요?
편집하다:내 목표는 각 파일에서 5-6개의 모듈을 가져오지 않는 것이며 성능상의 이유와는 관련이 없습니다.
해결책
아니요, 각 모듈의 네임스페이스에 배치해야 하므로 어떻게든 가져와야 합니다(합격하지 않는 한). logging
함수 인수로 사용하는데, 이는 최소한 일을 수행하는 이상한 방법이 될 것입니다).
그러나 모듈은 어쨌든 한 번만 가져옵니다. a
, b
, 그리고 c
네임스페이스)를 사용하므로 너무 많은 메모리를 사용하는 것에 대해 걱정하지 마세요.
물론 별도의 모듈에 넣고 가져올 수도 있습니다. 저것 각각에 a
, b
, 그리고 c
, 하지만 이 별도의 모듈은 여전히 매번 가져와야 합니다.
다른 팁
다음과 같은 공통 파일을 사용 하여이 작업을 수행 할 수 있습니다. include.py
, 그러나 와일드 카드 수입이 포함되어 있기 때문에 권장 관행에 위배됩니다. 다음 파일을 고려하십시오.
app/
__init__.py
foo/
a.py
b.py
c.py
include.py <- put the includes here.
__init__.py
지금에 a.py
, 등 : DO :
from include import *
위에서 언급 한 바와 같이, 와일드 카드 내포는 권장되지 않기 때문에 권장되지 않습니다.
네,하지만 하지 마십시오. 진심으로,하지 마십시오. 그러나 여전히 어떻게하는지 알고 싶다면 다음과 같이 보일 것입니다.
import __init__
re = __init__.re
logging = __init__.logging
os = __init__.os
나는 지저분하고 무의미하기 때문에 그렇게하지 않겠다고 말하며, 패키지가 실제로 사용해서는 안되기 때문에 __init__.py
그렇게. 패키지 초기화 코드입니다.