Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Grundlagen – detaillierte Erklärung von Paketen und Modulen

Python-Grundlagen – detaillierte Erklärung von Paketen und Modulen

PHP中文网
PHP中文网Original
2017-06-20 16:49:311879Durchsuche

Python-Grundlagen – Pakete und Module

Vorab geschrieben

Soweit nicht anders angegeben, basiert das Folgende auf Python3

Zusammenfassung

  1. Um den Code wiederzuverwenden und besser zu warten, verwendet Python Module und Pakete; eine Python-Datei ist ein Modul und ein Paket ist ein spezielles Verzeichnis organisiert Module (einschließlich __init__.pyDatei).

  2. Modulsuchpfad, PythonDer Interpreter sucht nach Modulen in einem bestimmten Verzeichnis, und bei der Ausführung ist sys.path der Suchpfad.

  3. Verwenden Sie das Schlüsselwort import, um das Modul zu importieren. Achten Sie auf die Beziehung zwischen import * und __all__.

1. Module und Importe

Ein Modul ist eine Datei, die Python-Definitionen und -Anweisungen enthält

PythonEin Modul ist eine Datei mit Definitionen und Anweisungen. Der Dateiname ist der Name des Moduls plus das Suffix .py.

1.1 Zur Wiederverwendung geboren

Angenommen, es gibt eine Funktion oder Klasse, die eine bestimmte Funktion ausführt und einfach zu verwenden ist. Um diese Funktion nutzen zu können, müssen Sie diesen Code in jede Datei kopieren, die Sie verwenden müssen. Doppelter Code ist in der Programmierung ein Tabu. Wenn die Funktionsimplementierung geändert werden muss, muss jede Stelle geändert werden, an der sie auftritt.

Die Wiederverwendung kann dieses Problem sehr gut lösen. Tatsächlich erleichtern Strukturen wie Funktionen und Klassen in gewissem Maße auch die Wiederverwendung.

Python organisiert eine Reihe verwandter Funktionen, Klassen usw. in einer Datei, und jede Datei ist ein Python-Modul.

1.2 Modul importieren

Verwenden Sie das Schlüsselwort import, um das Modul zu importieren (das Modul muss sich im Suchpfad befinden):

  1. import sys; grundlegende Importanweisung.

  2. System als System importieren; Alias ​​für den importierten Namen.

  3. aus dem Systemimportpfad; Modulspezifische Elemente importieren.

  4. from sys import *; alle importierbaren Namen aus sys importieren

import-only-once
Modul Das Verhalten Der einmalige Import ist in den meisten Fällen eine erhebliche Optimierung. Wenn Sie im selben Interpreter-Lebenszyklus die import-Anweisung mehrmals verwenden, um dasselbe Modul zu importieren, erfolgt der Import nur einmal.

Dies kann durch Hinzufügen von Ausgabeanweisungen zum Modul nachgewiesen werden. Die Verwendung von

import * und __all__
mit import * kann den Namensraum des aktuellen Moduls verunreinigen und einige Namen importieren, die nicht in Anführungszeichen gesetzt werden müssen. Daher wird seine Verwendung nicht empfohlen.

Tatsächlich stellt ein standardisiertes Modul eines Drittanbieters eine öffentliche Modulschnittstelle bereit, die die für das Modul verfügbaren Schnittstellen offenlegt. Öffentliche Schnittstellen werden durch eine Liste von Modulnamen __all__ definiert.

Wenn Sie beispielsweise ein Modul mit dem Namen mtest1 definieren:

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

Verwenden Sie alle Importmethoden:

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

Sie können sehen, dass die Funktion test11() nicht importiert wurde. Dies ist die Rolle von __all__.

2. Pakete und ihr Aufbau

Um Module besser zu organisieren, werden Module in Pakete gruppiert.

2.1 Paket ist ein spezielles Modul

Aus Sicht des Dateisystems ist das Paket das Verzeichnis, in dem sich das Modul befindet. Damit der Python-Interpreter es als Paket behandeln kann, muss das Paket direkt eine Datei (Modul) mit dem Namen __init__.py enthalten.

Ein Paket ist im Grunde ein anderer Modultyp, außer dass es andere Module und Pakete enthalten kann. Als Modul ist der Inhalt eines Pakets tatsächlich der Inhalt der Datei __init__.py (Modul).

Zum Beispiel lautet die Datei constants für ein Paket mit dem Namen constants/__init__.py wie folgt:

PI = 3.14

Dann kann das Paket constants behandelt werden als gewöhnliches Modul:

import constantsprint(constants.PI)
2.2 Paket erstellen

Wenn Sie ein Paket mit dem Namen drawing erstellen möchten, das shapes und Module müssen Sie das Verzeichnis und die Datei erstellen: colors

假设已经将~/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-Grundlagen – detaillierte Erklärung von Paketen und Modulen

Das obige ist der detaillierte Inhalt vonPython-Grundlagen – detaillierte Erklärung von Paketen und Modulen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn