다음은 패키지의 가능한 구조이다.
sound/ #Top-level package
__init__.py #Initialize the sound package
formats/ #Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ #Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
...
filters/ #Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
sys.path패키지를 가져올 때, Python은 패키지 하위 디렉터리를 찾기 위해 디렉터리를 검색합니다.
이 init.py파일은 Python이 파일을 포함하는 디렉토리를 패키지로 취급하도록 하는 데 필요합니다(최근 버전에서는 init.py를 사용하지 않아도 알아서 구분하기때문에 사용자에 취향에 따라 사용할지 결정). 이렇게 하면 와 같은 일반적인 이름을 가진 디렉토리가 모듈 검색 경로에서 나중에 발생하는 유효한 모듈을 의도치 않게 숨기는 것을 방지할 수 있습니다.
패키지 사용자는 다음과 같이 패키지에서 개별 모듈을 가져올 수 있습니다.
import sound.effects.echo
이것은 하위 모듈을 로드합니다 sound.effects.echo. 전체 이름으로 참조해야 합니다.
ound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
하위 모듈을 가져오는 또 다른 방법은 다음과 같습니다.
from sound.effects import echo
이렇게 하면 하위 모듈이 로드 echo되고 패키지 접두사 없이 사용할 수 있으므로 다음과 같이 사용할 수 있습니다.
echo.echofilter(input, output, delay=0.7, atten=4)
또 다른 변형은 원하는 함수나 변수를 직접 가져오는 것입니다.
from sound.effects.echo import echofilter
다시 말해서, 이렇게 하면 하위 모듈이 로드되지만 echo해당 기능을 echofilter()직접 사용할 수 있습니다.
echofilter(input, output, delay=0.7, atten=4)
를 사용할 때, 항목은 패키지의 하위 모듈(또는 하위 패키지)이거나, 함수, 클래스 또는 변수와 같이 패키지에 정의된 다른 이름일 수 있습니다. 명령문은 먼저 항목이 패키지에 정의되어 있는지 테스트합니다. 정의되어 있지 않으면 모듈이라고 가정하고 로드를 시도합니다. 찾지 못하면 예외가 발생합니다.from package import itemimportImportError
반대로, 와 같은 구문을 사용할 때 마지막 항목을 제외한 각 항목은 패키지여야 합니다. 마지막 항목은 모듈이나 패키지가 될 수 있지만 이전 항목에서 정의된 클래스, 함수 또는 변수가 될 수 없습니다.import item.subitem.subsubitem