Mit Python-Paketen können Sie große Systeme aufteilen und ihre Module auf konsistente Weise organisieren, sodass Sie und andere sie effizient nutzen und wiederverwenden können. Pythons Motto „Batterie eingebaut“ bedeutet, dass viele nützliche Pakete in der Standardbibliothek vorinstalliert sind.
Aber Sie können auch viele tolle Softwarepakete von Drittanbietern nutzen. In diesem Tutorial erfahren Sie alles, was Sie wissen müssen, was genau ein Paket ist, wie Sie Module aus einem Paket importieren, die integrierten Pakete in der Python-Standardbibliothek erkunden und Pakete von Drittanbietern installieren.
Bevor wir über Pakete sprechen, besprechen wir zunächst die Module. Module sind Quelldateien mit der Erweiterung *.py
, in denen Sie (und andere) die Funktionen und Klassen platzieren, aus denen Ihr Programm besteht.
Ein Paket in Python ist nur ein Ordner, der mehrere Python-Dateien enthält, und es sollte eine __init__.py
文件。 __init__.py
文件表明该目录是一个包。 __init__.py
Datei geben, die leer sein oder ausführbaren Code enthalten kann.
Pakete sind die Verkörperung des hierarchischen Namespace-Konzepts von Python. Zitat aus dem Zen von Python:
„Namespaces sind eine tolle Idee – machen wir mehr davon!“
Um das gesamte Python Zen anzuzeigen, geben Sie import this
in einer interaktiven Python-Sitzung ein:
>>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those! >>>
Namespaces helfen dabei, Code zu organisieren und Namenskonflikte zu vermeiden. Dies ist von entscheidender Bedeutung, wenn mehrere Personen zusammenarbeiten oder von anderen entwickelte Pakete verwenden.
Während ein Paket eine Hierarchie von Unterpaketen und Modulen (die Dateien sind) darstellt, muss die Hierarchie nicht unbedingt auf einem Dateisystem basieren, in dem Pakete und Unterpakete Verzeichnisse und Unterverzeichnisse sind. Es ist viel flexibler.
Beginnen wir mit einem einfachen Beispiel. Unten haben wir ein Paket namens simple_package
, das zwei Python-Module enthält.
simple_package . ├── __init__.py ├── tasks.py └── views.py 0 directories, 3 files
Werfen wir einen Blick auf das Paket namens ansible. Es ist kein Paket in der Standardbibliothek. Später erfahren Sie, wie Sie Pakete von Drittanbietern finden und installieren. Werfen wir nun einen Blick auf die Verzeichnisdateistruktur.
Diese Pakete werden normalerweise im Site-Packages-Verzeichnis des Python-Interpreters irgendwo unter lib installiert (abhängig von Version, Betriebssystem und Distribution).
Auf einem Mac befindet sich Python 3.10 beispielsweise unter
tree ansible -L 1 ansible ├── cli ├── collections ├── compat ├── config ├── constants.py ├── context.py ├── errors ├── executor ├── galaxy ├── __init__.py ├── inventory ├── keyword_desc.yml ├── __main__.py ├── modules ├── module_utils ├── parsing ├── playbook ├── plugins ├── __pycache__ ├── release.py ├── template ├── utils ├── vars └── _vendor 18 directories, 6 files
Es gibt 6 Module und 18 Verzeichnisse. Jedes Verzeichnis ist ein Unterpaket des Haupt-Ansible-Pakets. Wenn wir uns das Verzeichnis ansible/utils ansehen, können wir sehen, dass es andere Module und sogar ein Unterpaket enthält:
tree ansible/utils -L 1 ansible/utils ├── cmd_functions.py ├── collection_loader ├── color.py ├── context_objects.py ├── display.py ├── encrypt.py ├── fqcn.py ├── galaxy.py ├── hashing.py ├── helpers.py ├── __init__.py ├── jsonrpc.py ├── _junit_xml.py ├── listify.py ├── lock.py ├── multiprocessing.py ├── native_jinja.py ├── path.py ├── plugin_docs.py ├── py3compat.py ├── sentinel.py ├── shlex.py ├── singleton.py ├── ssh_functions.py ├── unicode.py ├── unsafe_proxy.py ├── vars.py └── version.py 1 directory, 27 files
Wenn Sie ein Modul importieren, führt Python einen Suchalgorithmus basierend auf dem Suchpfad durch, bei dem es sich um die Liste der Verzeichnisse handelt, in denen mit der Suche begonnen werden soll. Ein Suchpfad ist eine Liste von Verzeichnissen, die über sys.path
verfügbar sind, und Sie können ihn dynamisch bearbeiten (Elemente im Suchpfad hinzufügen, löschen oder verschieben). Das Site-Packages-Verzeichnis existiert immer.
Um das Modul path.py aus ansible/utils zu importieren, müssen Sie den folgenden Befehl verwenden:
import ansible.utils.path
Um das path
和 encrypt
-Modul zu importieren, verwenden Sie den folgenden Befehl:
import ansible.utils.path import ansible.utils.encrypt
Wenn Sie auch das Standardmodul os.path verwenden möchten, verwenden Sie den folgenden Befehl:
import os.path
Jetzt können Sie eines oder beide Pfadmodule verwenden, ohne dass es zu Konflikten aufgrund des Namensraums kommt, zu dem sie gehören.
Die Standardbibliothek enthält viele Pakete. Wenn Sie eine Aufgabe erledigen müssen, sich aber nicht sicher sind, wie, lohnt es sich, sie zu erkunden. Für jede gängige Aufgabe, wie Mathematik, Shell-Integration, Betriebssystem-Integration, String-Manipulation, Vernetzung und gängige Dateiformate, gibt es höchstwahrscheinlich ein gut gestaltetes, leistungsstarkes und gut getestetes Paket in der Standardbibliothek
Sie können den Standardbibliothekspaketen wirklich vertrauen, denn der Zugang zur Standardbibliothek ist eine große Sache. Das Paket wurde entweder von zentralen Python-Entwicklern entworfen oder wurde gründlich geprüft und in der Praxis häufig als Bibliothek eines Drittanbieters verwendet, bevor es in die Standardbibliothek aufgenommen wurde.
Hier sind alle Pakete der Standardbibliothek nach Themen geordnet.
Die Standardbibliothek ist großartig, aber oft benötigt man spezielle Funktionen, die nicht zum Standard gehören. Das bedeutet nicht, dass Sie es von Grund auf neu schreiben müssen. Python verfügt über eine lebendige und aktive Community, die viel Code kostenlos entwickelt und teilt. Geben Sie PyPI ein: den Python-Paketindex. PyPI hostet alle öffentlich verfügbaren Softwarepakete und bietet einen One-Stop-Shop zum Durchsuchen dieser.
PyPI 将包组织在可浏览的索引中。您可以按主题、环境、框架、开发、状态、目标受众、许可证、自然语言、编程语言(是的,有支持多种编程语言的 Python 包)和操作系统来浏览和搜索。
截至 2021 年,PyPI 不再显示软件包的下载统计信息,因为维护统计信息所需的资源导致其效率低下。
有两种方法可以从 PyPI 安装软件包。您可以下载该软件包,然后运行 python setup.py install
。但现代的方法是使用 pip、setuptools 和wheel。
从 Python 3.4 和 Python 2.79 开始默认包含 Pip 和 setuptools,但您需要升级到最新版本:
pip install -U pip setuptools
python -m pip install -U pip setuptools
使用pip安装wheel:
pip install wheel.
要使用 pip 安装软件包,请发出此命令。
pip install <package_name>
其中 package_name
是包的名称。例如,要安装 Ansible,命令如下所示:
pip install ansible
如果需要特定版本,也可以指定如下:
pip install ansible==7.0
Python 包始终安装到环境中。我在这里不会介绍的一种常见做法是使用虚拟环境来管理具有不同解释器和/或不同安装包集的多个独立的 Python 安装。您可以在此处阅读有关虚拟环境的更多信息。
Python 打包权威提供了大量有关打包最佳实践的指导。这很重要,因为这是一个正在积极开发的领域,并且建议会快速发展。
此外,如果您想做一些特别的事情,例如从替代存储库而不是 PyPI 安装软件包或以更复杂的方式使用 pip,您会发现精彩的讨论和实用的建议。
当您是 Python 初学者时,您会学习核心语言并享受使用它的乐趣。很快您就会发现标准库,并且随着您获得更多经验,您会从它的丰富性中受益越来越多。
作为 Pythonista,您发展的下一阶段是将 Python 社区在 PyPI 上带来的巨大优势融入到您的系统中。包作为可重用 Python 代码的部署单元使这个生态系统得以实现。
Das obige ist der detaillierte Inhalt vonEntdecken Sie die Verwendung von Python-Paketen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!