찾다
백엔드 개발파이썬 튜토리얼Python 기본 - 패키지 및 모듈에 대한 자세한 설명

Python 기본 - 패키지 및 모듈에 대한 자세한 설명

Jun 20, 2017 pm 04:49 PM
python베이스기준 치수

Python 기본 - 패키지 및 모듈

앞에 작성

별도의 언급이 없는 한 다음은 Python3

요약

  1. 코드의 재사용과 더 나은 유지 관리를 위해 Python모듈과 패키지가 사용됩니다. Python 파일은 모듈이고, 패키지는 모듈(__init__.py 파일 포함)을 구성하는 특수 디렉터리입니다. Python使用了模块与包;一个Python文件就是一个模块,包是组织模块的特殊目录(包含__init__.py文件)。

  2. 模块搜索路径,Python解释器在特定的目录中搜索模块,运行时sys.path即搜索路径。

  3. 使用import关键字导入模块,注意 import *__all__的关系。

1. 模块与导入

A module is a file containing Python definitions and statements

Python模块就是包含定义以及语句的文件,文件名是模块的名字加上.py后缀。

1.1 为重用而生

假设有一个完成特定功能,很好用的函数或者类。为了使用这个功能,不得不把这段代码复制到需要使用的每一个文件中。重复代码是编程的大忌,如果功能实现需要修改,会不得不修改每一个出现的地方,这是反人类的。

重用能够很好的解决这一问题,实际上,函数,类等结构在一定程度上也为重用提供了便利。

Python中,将一系列相关的函数,类等组织在一个文件中,每一个文件都是一个Python模块。

1.2 导入模块

使用import关键字导入模块(模块需在搜索路径中):

  1. import sys;基础导入语句。

  2. import sys as system;为导入的名字起别名。

  3. from sys import path;导入模块特定元素。

  4. from sys import *;从sys中导入全部可导入名字

import-only-once
模块只导入一次这种行为在大多数情况下是一种实质性的优化,在同一个解释器生命周期内,多次使用import语句导入同一个模块,导入只发生一次。

这一点可以在模块中加入输出语句证明。

import *__all__
使用import *可能会污染当前模块的名字空间,导入了一些不需要引用的名字。因此不推荐使用。

事实上,规范的第三方模块会提供一个模块公共接口,暴露该模块可用的接口。公共接口由模块名为__all__的列表定义。

如定义名为mtest1的模块:

__all__ = ['test1', 'test12']def test1():print('test1')def test11():print('test11')def test12():print('test12')

使用全部导入的方式:

>>> form mtest1 import *>>> dir()>>> ['__annotations__', '__builtins__', '__doc__', '__loader__','__name__', '__package__', '__spec__', 'test1', 'test12']

可以看到函数test11()并没有被导入,这就是__all__的作用了。

2. 包与其构建

为了更好组织模块,将模块分组为包(package)。

2.1 包是特殊模块

从文件系统上看,包就是模块所在目录。为使Python解释器将其区别普通目录作为包看待,包中必须直接包含一个名为__init__.py的文件(模块)。

包基本上就是另外一类模块,不同的地方在于包能包含其他模块与包。包作为一个模块,其内容其实就是文件__init__.py(模块)的内容。

如名为constants的包,文件constants/__init__.py如下:

PI = 3.14

那么可以将包constants作为普通模块对待:

import constantsprint(constants.PI)
2.2 构建包

如果要构建一个名为drawing的包,其中包含shapescolors

모듈 검색 경로, Python 인터프리터는 특정 디렉터리에서 모듈을 검색하며 sys.path는 실행 시 검색 경로입니다. 모듈은 Python 정의와 명령문을 포함하는 파일입니다.
1.1 재사용을 위해 탄생
재사용은 이 문제를 매우 잘 해결할 수 있습니다. 실제로 함수나 클래스와 같은 구조도 어느 정도 재사용의 편의성을 제공합니다.
1.2 모듈 가져오기
sys를 시스템으로 가져옵니다. 가져온 이름의 별칭을 지정합니다. from sys import *; sys에서 가져올 수 있는 모든 이름을 가져옵니다
모듈만 동작 한 번 가져오는 것은 대부분의 경우 상당한 최적화입니다. 동일한 인터프리터 수명 주기에서 import 문을 여러 번 사용하여 동일한 모듈을 가져오는 경우 가져오기는 한 번만 발생합니다. 이는 모듈에 출력 문을 추가하여 증명할 수 있습니다.
모듈을 가져오려면 import 키워드를 사용하고, import *__all__ 사이의 관계에 주의하세요. 1. 모듈 및 가져오기
Python모듈은 정의와 명령문을 포함하는 파일입니다. name 모듈 이름에 .py 접미사를 더한 것입니다. 특정 기능을 수행하고 사용하기 쉬운 함수나 클래스가 있다고 가정해 보세요. 이 기능을 사용하려면 사용해야 하는 모든 파일에 이 코드를 복사해야 합니다. 중복된 코드는 프로그래밍에서 금기 사항입니다. 함수 구현을 수정해야 한다면 모든 항목을 수정해야 합니다.
Python에서는 일련의 관련 함수, 클래스 등이 파일로 구성됩니다. 각 파일은 Python 모듈입니다. 모듈을 가져오려면 import 키워드를 사용하세요(모듈이 검색 경로에 있어야 함):
import sys;
sys 가져오기 경로에서 모듈 특정 요소를 가져옵니다.
import-only-once
import *__all__🎜
import *를 사용하면 현재 모듈의 네임스페이스가 오염되고 불필요한 이름을 가져올 수 있습니다. 참조의. 따라서 사용을 권장하지 않습니다. 🎜🎜실제로 표준화된 타사 모듈은 모듈 공용 인터페이스를 제공하여 모듈에 사용 가능한 인터페이스를 노출합니다. 공용 인터페이스는 __all__이라는 모듈 목록으로 정의됩니다. 🎜🎜예를 들어 mtest1이라는 모듈을 정의합니다. 🎜
__all__ = ['colors']
🎜모든 가져오기 방법 사용: 🎜
rrreee div div>🎜test11() 함수가 Import되지 않은 것을 볼 수 있습니다. 이것이 __all__의 역할입니다. 🎜🎜2. 패키지 및 구성🎜🎜모듈을 더 잘 구성하기 위해 모듈은 패키지로 그룹화됩니다. 🎜
2.1 패키지는 특수 모듈입니다
🎜파일 시스템 관점에서 패키지는 모듈이 위치한 디렉터리입니다. Python 인터프리터가 이를 패키지로 처리하려면 패키지에 __init__.py라는 파일(모듈)이 직접 포함되어 있어야 합니다. 🎜🎜패키지는 기본적으로 또 다른 유형의 모듈입니다. 차이점은 패키지에 다른 모듈과 패키지가 포함될 수 있다는 것입니다. 모듈로서 패키지의 내용은 실제로 __init__.py 파일(모듈)의 내용입니다. 🎜🎜예를 들어 constants라는 패키지의 경우 constants/__init__.py 파일은 다음과 같습니다. 🎜
rrreee
🎜그러면 패키지는 상수가 일반 모듈로 처리될 수 있습니다. 🎜
rrreee
2.2 빌드 패키지
🎜빌드하려는 경우 shapescolors 모듈이 포함된 raw 패키지라는 모듈을 사용하려면 다음 디렉터리와 파일을 만들어야 합니다. 🎜🎜🎜🎜🎜파일 /directory 🎜🎜description🎜🎜 ~/python🎜🎜directory 검색 경로에 추가되었습니다 ~/python/drawing🎜🎜package directory (그림 패키지) 🎜🎜🎜🎜 ~/python/drawing/_ init__ .py🎜🎜패키지 코드(그리기 모듈) 🎜🎜🎜🎜~/python/raw/colors.py🎜🎜color module🎜🎜🎜🎜~/python/드로잉/shapes.py🎜🎜shapes 모듈🎜🎜🎜🎜

假设已经将~/python作为搜索目录。依照这个设置,下列导入语句都是合法的:

  1. import drawing # 导入drawing包(即__init__.py模块)

  2. import drawing.colors # 导入colors模块,使用drawing.colors.attr的方式引用

  3. from drawing import shapes # 导入shapes模块

__all__变量
与模块的__all__变量相似,包的__all__变量决定了使用from package import *导入的子模块。

如以上drawing包的__init__.py文件内容如下:

__all__ = ['colors']

那么使用from drawing import *只会导入colors模块。

3. 搜索路径

现在已经编写完了一个很好用的模块,并且通过了测试。那么如何让这个模块可用呢?即如何让这个模块具备可导入到其他模块的能力。

3.1 搜索模块

当使用import语句导入模块时,Python解释器通过以下方式搜索模块:

  1. 首先搜索built-in模块

  2. 最后搜索变量sys.path提供的路径列表

sys.path在解释器启动时从以下位置初始化:

  1. 当前脚本路径

  2. 环境变量PYTHONPATH指定的路径集合

  3. 安装默认路径

sys.path初始化完成后,可以在运行时修改。

3.2 让模块可用

那么现在若要使模块可用,一是将其放置到已有的搜索路径下,二是指定模块所在路径为搜索路径。

一般情况下,若选择第一种方式,我们将模块放置到Python安装路径的\lib\site-packages下,这个目录是专门用来安装第三方模块的。正如该目录下的README文件展示的那样:

This directory exists so that 3rd party packages can be installed here. Read the source for site.py for more details.

若选择第二种方式,直接将模块所在目录加入到环境变量PYTHONPATH中即可。

值得注意的是,可以在\lib\site-packages路径下新建一个名为user_lib.pth的文件,内容是需要搜索的路径,一行一个,也可以将指定路径加入到搜索目录中:

Python 기본 - 패키지 및 모듈에 대한 자세한 설명

위 내용은 Python 기본 - 패키지 및 모듈에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
파이썬의 주요 목적 : 유연성과 사용 편의성파이썬의 주요 목적 : 유연성과 사용 편의성Apr 17, 2025 am 12:14 AM

Python의 유연성은 다중 파리가 지원 및 동적 유형 시스템에 반영되며, 사용 편의성은 간단한 구문 및 풍부한 표준 라이브러리에서 나옵니다. 유연성 : 객체 지향, 기능 및 절차 프로그래밍을 지원하며 동적 유형 시스템은 개발 효율성을 향상시킵니다. 2. 사용 편의성 : 문법은 자연 언어에 가깝고 표준 라이브러리는 광범위한 기능을 다루며 개발 프로세스를 단순화합니다.

파이썬 : 다목적 프로그래밍의 힘파이썬 : 다목적 프로그래밍의 힘Apr 17, 2025 am 12:09 AM

Python은 초보자부터 고급 개발자에 이르기까지 모든 요구에 적합한 단순성과 힘에 호의적입니다. 다목적 성은 다음과 같이 반영됩니다. 1) 배우고 사용하기 쉽고 간단한 구문; 2) Numpy, Pandas 등과 같은 풍부한 라이브러리 및 프레임 워크; 3) 다양한 운영 체제에서 실행할 수있는 크로스 플랫폼 지원; 4) 작업 효율성을 향상시키기위한 스크립팅 및 자동화 작업에 적합합니다.

하루 2 시간 안에 파이썬 학습 : 실용 가이드하루 2 시간 안에 파이썬 학습 : 실용 가이드Apr 17, 2025 am 12:05 AM

예, 하루에 2 시간 후에 파이썬을 배우십시오. 1. 합리적인 학습 계획 개발, 2. 올바른 학습 자원을 선택하십시오. 3. 실습을 통해 학습 된 지식을 통합하십시오. 이 단계는 짧은 시간 안에 Python을 마스터하는 데 도움이 될 수 있습니다.

Python vs. C : 개발자를위한 장단점Python vs. C : 개발자를위한 장단점Apr 17, 2025 am 12:04 AM

Python은 빠른 개발 및 데이터 처리에 적합한 반면 C는 고성능 및 기본 제어에 적합합니다. 1) Python은 간결한 구문과 함께 사용하기 쉽고 데이터 과학 및 웹 개발에 적합합니다. 2) C는 고성능과 정확한 제어를 가지고 있으며 게임 및 시스템 프로그래밍에 종종 사용됩니다.

파이썬 : 시간 약속과 학습 속도파이썬 : 시간 약속과 학습 속도Apr 17, 2025 am 12:03 AM

Python을 배우는 데 필요한 시간은 개인마다 다릅니다. 주로 이전 프로그래밍 경험, 학습 동기 부여, 학습 리소스 및 방법 및 학습 리듬의 영향을받습니다. 실질적인 학습 목표를 설정하고 실용적인 프로젝트를 통해 최선을 다하십시오.

파이썬 : 자동화, 스크립팅 및 작업 관리파이썬 : 자동화, 스크립팅 및 작업 관리Apr 16, 2025 am 12:14 AM

파이썬은 자동화, 스크립팅 및 작업 관리가 탁월합니다. 1) 자동화 : 파일 백업은 OS 및 Shutil과 같은 표준 라이브러리를 통해 실현됩니다. 2) 스크립트 쓰기 : PSUTIL 라이브러리를 사용하여 시스템 리소스를 모니터링합니다. 3) 작업 관리 : 일정 라이브러리를 사용하여 작업을 예약하십시오. Python의 사용 편의성과 풍부한 라이브러리 지원으로 인해 이러한 영역에서 선호하는 도구가됩니다.

파이썬과 시간 : 공부 시간을 최대한 활용파이썬과 시간 : 공부 시간을 최대한 활용Apr 14, 2025 am 12:02 AM

제한된 시간에 Python 학습 효율을 극대화하려면 Python의 DateTime, Time 및 Schedule 모듈을 사용할 수 있습니다. 1. DateTime 모듈은 학습 시간을 기록하고 계획하는 데 사용됩니다. 2. 시간 모듈은 학습과 휴식 시간을 설정하는 데 도움이됩니다. 3. 일정 모듈은 주간 학습 작업을 자동으로 배열합니다.

파이썬 : 게임, Guis 등파이썬 : 게임, Guis 등Apr 13, 2025 am 12:14 AM

Python은 게임 및 GUI 개발에서 탁월합니다. 1) 게임 개발은 Pygame을 사용하여 드로잉, 오디오 및 기타 기능을 제공하며 2D 게임을 만드는 데 적합합니다. 2) GUI 개발은 Tkinter 또는 PYQT를 선택할 수 있습니다. Tkinter는 간단하고 사용하기 쉽고 PYQT는 풍부한 기능을 가지고 있으며 전문 개발에 적합합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)