Python 套件可讓您分解大型系統並以一致的方式組織其模組,以便您和其他人可以有效地使用和重複使用。 Python 的座右銘「內建電池」意味著它在標準庫中預先安裝了許多有用的套件。
但是您也可以利用許多令人驚嘆的第三方軟體包。在本教程中,您將學習所有您需要了解的套件到底是什麼、如何從套件導入模組、探索 Python 標準庫中的內建套件以及安裝第三方套件。
在討論套件之前,我們先來討論一下模組。模組是帶有 *.py
extension 的來源文件,您(和其他人)在其中放置組成程式的函數和類別。
Python 中的套件只是一個包含多個 Python 檔案的資料夾,並且應該有一個 __init__.py
檔案。 __init__.py
檔案表示該目錄是一個套件。 __init__.py
檔案可以為空或包含一些執行程式碼。
套件是Python分層命名空間概念的體現。引用 Python 之禪:
「命名空間是一個非常棒的想法——讓我們做更多這樣的事情!」
要查看整個 Python Zen,請在 Python 互動式會話中輸入 import this
:
>>> 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! >>>
命名空間有助於組織程式碼並防止命名衝突。當多人一起工作或使用其他人開發的軟體包時,這一點至關重要。
雖然套件代表子套件和模組的層次結構(它們是檔案),但層次結構不必基於檔案系統,其中套件和子套件是目錄和子目錄。它比這靈活得多。
讓我們從一個簡單的例子開始。下面我們有一個名為 simple_package
的套件,其中包含兩個 Python 模組。
simple_package . ├── __init__.py ├── tasks.py └── views.py 0 directories, 3 files
讓我們來看看名為 ansible 的套件。它不是標準庫中的套件。稍後您將看到如何尋找和安裝第三方軟體包。現在,我們來看看目錄檔案結構。
這些套件通常會安裝到 Python 解譯器的 site-packages 目錄中,位於 lib 下的某個位置(取決於版本、作業系統和發行版)。
例如,在 Mac 上,Python 3.10 將位於
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
有6個模組和18個目錄。每個目錄都是主 ansible 包的子包。查看 ansible/utils 目錄,我們可以看到它包含其他模組,甚至還有一個子包:
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
當你匯入一個模組時,Python會根據搜尋路徑執行搜尋演算法,搜尋路徑是開始搜尋的目錄清單。搜尋路徑是透過 sys.path
可用的目錄列表,您可以動態操作它(新增、刪除或移動搜尋路徑中的項目)。 site-packages 目錄始終存在。
要從 ansible/utils 匯入 path.py 模組,您需要使用以下命令:
import ansible.utils.path
要匯入 path
和 encrypt
模組,請使用下列指令:
import ansible.utils.path import ansible.utils.encrypt
如果您還想使用標準 os.path 模組,您將使用以下命令:
import os.path
現在您可以使用其中一個或兩個路徑模組,而不會因為它們所屬的命名空間而發生衝突。
標準庫有很多套件。每當您需要完成一項任務但不確定如何完成時,就值得探索它。對於任何通用任務,如數學、shell 整合、作業系統整合、字串操作、網路和常見文件格式,標準庫中很可能有一個設計良好、性能良好且經過良好測試的套件.
你真的可以信任標準庫包,因為進入標準庫是一件大事。該套件要么是由 Python 核心開發人員設計的,要么是經過嚴格審查並在進入標準庫之前經常作為第三方庫在該領域大量使用的。
以下是標準庫中按主題組織的所有套件。
標準庫很棒,但通常會有一些您需要的特殊功能不是標準的。這並不意味著您必須從頭開始編寫。 Python 擁有一個充滿活力且活躍的社區,開發並免費分享大量程式碼。輸入 PyPI:Python 套件索引。 PyPI 託管所有公開可用的軟體包,並提供一站式商店供瀏覽它們。
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 代码的部署单元使这个生态系统得以实现。
以上是探索 Python 套件的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!