이 글의 내용은 파이썬에서 패키지가 무엇인지에 관한 것입니다. 그것은 무엇을 합니까? 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에 별도로 하위 패키지의 내용을 소개해야 하는 경우
#🎜 🎜#패키지 주의 사항: 패키지와 관련된 가져오기 문도 import 및 from xxx import xxx이지만 어느 것을 사용하든, 어디에 있든 상관 없습니다. , 가져올 때 따라야 합니다. 한 가지 원칙: 가져올 때 점이 있는 모든 항목은 점의 왼쪽이 패키지여야 합니다. 그렇지 않으면 일련의 오류가 보고될 수 있습니다. 예: from a.b.c import d
위 내용은 Python의 패키지는 무엇입니까? 그것은 무엇을 합니까? Python 패키지 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!