Python의 패키지는 무엇입니까? 그것은 무엇을 합니까? Python 패키지 소개

不言
풀어 주다: 2018-11-20 16:10:57
앞으로
7513명이 탐색했습니다.

이 글의 내용은 파이썬에서 패키지가 무엇인지에 관한 것입니다. 그것은 무엇을 합니까? Python의 패키지 도입에는 특정 참고 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

1. 패키지란 무엇인가요?

패키지는 ".module"을 통해 Python 모듈 네임스페이스를 구성하는 방법입니다. name" 방식으로 넣습니다. 우리가 넣은 각 폴더는 패키지라고 할 수 있습니다.

하지만 python2에서 지정된다는 점에 유의하세요. __init__는 package.py 파일 내에 있어야 합니다. .

패키지를 만드는 목적은 실행하는 것이 아니라 가져와서 사용하는 것입니다. 패키지는 단지 형태일 뿐이며, 패키지의 본질은 모듈입니다.#🎜 🎜##🎜 🎜#2.패키지의 역할은?

패키지의 본질은 폴더이기 때문에 폴더의 유일한 기능은 파일을 정리하는 것뿐입니다. , 불가능합니다 #🎜🎜 #

모든 기능이 폴더에 있으므로 모듈을 사용하여 기능을 정리합니다. 모듈이 많아질수록 폴더를 사용하여 정리해야 합니다

모듈 파일을 사용하여 프로그램의 구조와 유지 관리성을 향상합니다.

다음으로 나중에 학습할 수 있도록 몇 가지 패키지를 만듭니다. 패키지는 만들기 쉽고 __init__.py가 있는 폴더만 있으면 됩니다.#🎜 🎜#
import os
os.makedirs('glance/api')
os.makedirs('glance/cmd')
os.makedirs('glance/db')
l = []
l.append(open('glance/__init__.py','w'))
l.append(open('glance/api/__init__.py','w'))
l.append(open('glance/api/policy.py','w'))
l.append(open('glance/api/versions.py','w'))
l.append(open('glance/cmd/__init__.py','w'))
l.append(open('glance/cmd/manage.py','w'))
l.append(open('glance/db/__init__.py','w'))
l.append(open('glance/db/models.py','w'))
map(lambda f:f.close() ,l)
로그인 후 복사

디렉터리 구조 만들기

각 폴더에 몇 가지 메서드를 추가합니다. #🎜🎜 #
#policy.py
def get():
    print('from policy.py')
    
#versions.py
def create_resource(conf):
    print('from version.py: ',conf)
    
#manage.py
def main():
    print('from manage.py')
    
#models.py
def register_models(engine):
    print('from models.py: ',engine)
로그인 후 복사

다음을 수행할 수 있습니다. test.py에서 패키지 내용을 사용하고, 패키지를 가져올 때 import 또는 from xxx import xxx

import glance.db.models
glance.db.models.register_models('mysql')
from glance.api.policy import get
get()
로그인 후 복사

그러나 참고하세요: from xxx import 형식에서 xxx, "점"은 가져오기 후에 나타날 수 없습니다. 즉, from a.b import c는 괜찮습니다.

But from a import b.c는 잘못되었습니다

#🎜 🎜#

3. __init__.py는 무엇을 합니까?

패키지 또는 패키지의 다른 부분을 처음으로 가져오는 경우라면 어떤 방법을 사용하여 패키지를 가져오든 상관없습니다. 패키지 부분에서는 __init__.py 파일이 먼저 실행됩니다.

이 파일은 비어 있을 수 있지만 그런 다음 이전에 사용한 xxx에서 저장할 수도 있습니다. import *를 패키지 호출에 사용할 수 있습니까?

예, 가져온 콘텐츠를 * 결정하려면 __init__.py 파일에 __all__을 제공해야 합니다.

print("我是glance的__init__.py⽂件. ")
x = 10
def hehe():
    print("我是呵呵")
    
def haha():
    print("我是哈哈")
__all__ = ['x', "hehe"]
로그인 후 복사
#🎜🎜 #test.py# 🎜🎜#
from glance import *
print(x) # OK
hehe() # OK
haha() # 报错. __all__⾥没有这个⻤东⻄
로그인 후 복사

4. 상대 가져오기 및 절대 가져오기

우리의 최종 패키지 Glance는 다른 사람들이 사용할 수 있도록 작성되었으며, 필요할 때 Glance 패키지 안에도 포함됩니다. 서로 가져오는 경우에는 절대 가져오기와 상대 가져오기의 두 가지 방법이 있습니다.

1) 절대 가져오기: 시작점으로 살펴보기

2 ). . 또는 ..을 시작점으로 사용하세요

예를 들어 ⽤glance/cmd/manage.py를 사용합니다

# 在glance/api/version.py
#绝对导⼊
from glance.cmd import manage
manage.main()
#相对导⼊
# 这种情形不可以在versions中启动程序.
# attempted relative import beyond top-level package
from ..cmd import manage
manage.main()
로그인 후 복사
#🎜🎜 #파이썬 패키지 경로를 테스트할 때 주의해야 합니다.

파이썬에서는 현재 패키지의 범위를 초과하는 프로그램을 실행할 수 없습니다(상대 가져오기).

#🎜 🎜#절대 가져오기를 사용하면 그런 문제가 없습니다. 즉, 패키지에서 상대 가져오기를 사용하면 패키지에 있는 정보를 사용할 때 패키지 외부에서만 가져올 수 있습니다

# 在policy.py
import versions
로그인 후 복사
#🎜 🎜#

우리 프로그램의 항목이 정책이라면 지금은 프로그램에 문제가 없습니다. 하지만 Glance 외부에서 정책을 가져오면 오류가 발생합니다.# 🎜🎜 #

이유는 정책이 외부에서 액세스되는 경우 .sys.path의 경로가 외부에 있으므로 버전 모듈을 사용할 수 없기 때문입니다. 따라서 오류는 확실히 보고됩니다:

ModuleNotFoundError: No module named 'versions'
로그인 후 복사

패키지를 가져올 때 오류가 발생하면 먼저 sys.path를 확인하여 확인해야 합니다. 실제로 패키지 정보를 얻을 수 있습니다.# 🎜🎜#5. 패키지를 별도로 가져옵니다

# 在test.py中
import glance
로그인 후 복사
가져온 Glance는 현재 하위 패키지를 로드하지 않기 때문에 아무것도 할 수 없습니다. __init__.py에서 __init__.py에 별도로 하위 패키지의 내용을 소개해야 하는 경우 2를 사용합니다. 절대 경로

#🎜 🎜#패키지 주의 사항: 패키지와 관련된 가져오기 문도 import 및 from xxx import xxx이지만 어느 것을 사용하든, 어디에 있든 상관 없습니다. , 가져올 때 따라야 합니다. 한 가지 원칙: 가져올 때 점이 있는 모든 항목은 점의 왼쪽이 패키지여야 합니다. 그렇지 않으면 일련의 오류가 보고될 수 있습니다. 예: from a.b.c import d

위 내용은 Python의 패키지는 무엇입니까? 그것은 무엇을 합니까? Python 패키지 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:cnblogs.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!