Les packages Python vous permettent de diviser de grands systèmes et d'organiser leurs modules de manière cohérente afin que vous et d'autres puissiez les utiliser et les réutiliser efficacement. La devise de Python « batterie intégrée » signifie qu'il est préinstallé avec de nombreux packages utiles dans la bibliothèque standard.
Mais vous pouvez également profiter de nombreux logiciels tiers incroyables. Dans ce didacticiel, vous apprendrez tout ce que vous devez savoir sur ce qu'est exactement un package, comment importer des modules à partir d'un package, explorer les packages intégrés dans la bibliothèque standard Python et installer des packages tiers.
Avant de discuter des packages, parlons d’abord des modules. Les modules sont des fichiers sources avec l'extension *.py
dans lesquels vous (et d'autres) placez les fonctions et les classes qui composent votre programme.
Un package en Python n'est qu'un dossier contenant plusieurs fichiers Python, et il devrait y avoir un __init__.py
文件。 __init__.py
文件表明该目录是一个包。 __init__.py
fichier qui peut être vide ou contenir du code exécutable.
Les packages sont l'incarnation du concept d'espace de noms hiérarchique de Python. Citant le Zen de Python :
"Les espaces de noms sont une excellente idée - faisons-en davantage !"
Pour visualiser l'intégralité de Python Zen, entrez import this
dans une session interactive Python :
>>> 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! >>>
Les espaces de noms aident à organiser le code et à éviter les conflits de noms. Ceci est crucial lorsque plusieurs personnes travaillent ensemble ou utilisent des packages développés par d’autres.
Bien qu'un package représente une hiérarchie de sous-packages et de modules (qui sont des fichiers), la hiérarchie ne doit pas nécessairement être basée sur un système de fichiers, où les packages et les sous-packages sont des répertoires et sous-répertoires. C'est beaucoup plus flexible que ça.
Commençons par un exemple simple. Ci-dessous, nous avons un package appelé simple_package
qui contient deux modules Python.
simple_package . ├── __init__.py ├── tasks.py └── views.py 0 directories, 3 files
Jetons un coup d'œil au package appelé ansible. Ce n'est pas un package dans la bibliothèque standard. Vous verrez plus tard comment rechercher et installer des packages tiers. Examinons maintenant la structure des fichiers de répertoires.
Ces packages sont généralement installés dans le répertoire site-packages de l'interpréteur Python, quelque part sous lib (selon la version, le système d'exploitation et la distribution).
Par exemple, sur un Mac, Python 3.10 se trouvera dans
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
Il y a 6 modules et 18 répertoires. Chaque répertoire est un sous-paquet du package ansible principal. En regardant le répertoire ansible/utils, on voit qu'il contient d'autres modules et même un sous-package :
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
Lorsque vous importez un module, Python effectuera un algorithme de recherche basé sur le chemin de recherche, qui est la liste des répertoires dans lesquels lancer la recherche. Un chemin de recherche est une liste de répertoires disponibles via sys.path
et vous pouvez le manipuler dynamiquement (ajouter, supprimer ou déplacer des éléments dans le chemin de recherche). Le répertoire site-packages existe toujours.
Pour importer le module path.py depuis ansible/utils vous devez utiliser la commande suivante :
import ansible.utils.path
Pour importer le module path
和 encrypt
, utilisez la commande suivante :
import ansible.utils.path import ansible.utils.encrypt
Si vous souhaitez également utiliser le module os.path standard, vous utiliserez la commande suivante :
import os.path
Vous pouvez désormais utiliser l'un ou les deux modules de chemin sans entrer en conflit en raison de l'espace de noms auquel ils appartiennent.
La bibliothèque standard contient de nombreux packages. Chaque fois que vous devez accomplir une tâche mais que vous ne savez pas comment procéder, cela vaut la peine de l'explorer. Pour toute tâche courante, telle que les mathématiques, l'intégration du shell, l'intégration du système d'exploitation, la manipulation de chaînes, la mise en réseau et les formats de fichiers courants, il existe très probablement un package bien conçu, performant et bien testé dans la bibliothèque standard
.Vous pouvez vraiment faire confiance aux packages de bibliothèque standard, car accéder à la bibliothèque standard est un gros problème. Le package a été conçu par les principaux développeurs Python ou a été soigneusement vérifié et largement utilisé sur le terrain en tant que bibliothèque tierce avant d'être intégré à la bibliothèque standard.
Voici tous les packages de la bibliothèque standard organisés par thème.
La bibliothèque standard est excellente, mais vous avez souvent besoin de fonctionnalités spéciales qui ne sont pas standard. Cela ne signifie pas que vous devez l'écrire à partir de zéro. Python possède une communauté dynamique et active qui développe et partage gratuitement de nombreux codes. Entrez PyPI : l'index des packages Python. PyPI héberge tous les progiciels accessibles au public et fournit un guichet unique pour les parcourir.
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 代码的部署单元使这个生态系统得以实现。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!