Rumah > pembangunan bahagian belakang > Tutorial Python > Terokai penggunaan pakej Python

Terokai penggunaan pakej Python

WBOY
Lepaskan: 2023-09-02 12:25:07
asal
1287 orang telah melayarinya

探索 Python 包的使用

Python pakej membolehkan anda memecahkan sistem besar dan mengatur modul mereka dengan cara yang konsisten supaya anda dan orang lain boleh menggunakan dan menggunakannya semula dengan cekap. Moto Python "bateri terbina dalam" bermaksud bahawa ia telah diprapasang dengan banyak pakej berguna dalam perpustakaan standard.

Tetapi anda juga boleh memanfaatkan banyak pakej perisian pihak ketiga yang menakjubkan. Dalam tutorial ini, anda akan mempelajari semua yang anda perlu tahu tentang apa sebenarnya pakej, cara mengimport modul daripada pakej, meneroka pakej terbina dalam pustaka standard Python dan memasang pakej pihak ketiga.

Apakah itu beg?

Sebelum membincangkan pakej, mari kita bincangkan modul terlebih dahulu. Modul ialah fail sumber dengan sambungan *.py di mana anda (dan orang lain) meletakkan fungsi dan kelas yang membentuk atur cara anda. *.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!
>>> 
Salin selepas log masuk
 

命名空间有助于组织代码并防止命名冲突。当多人一起工作或使用其他人开发的软件包时,这一点至关重要。

虽然包代表子包和模块的层次结构(它们是文件),但层次结构不必基于文件系统,其中包和子包是目录和子目录。它比这灵活得多。

创建 Python 包

让我们从一个简单的例子开始。下面我们有一个名为 simple_package 的包,其中包含两个 Python 模块。

simple_package
.
├── __init__.py
├── tasks.py
└── views.py

0 directories, 3 files
Salin selepas log masuk
  • __init__.py :表示它是一个包
  • tasks.pyviews.py 是模块

第三方软件包

让我们看一下名为 ansible 的包。它不是标准库中的包。稍后您将看到如何查找和安装第三方软件包。现在,我们来看看目录文件结构。

这些包通常会安装到 Python 解释器的 site-packages 目录中,位于 lib 下的某个位置(取决于版本、操作系统和发行版)。

例如,在 Mac 上,Python 3.10 将位于 /lib/python3.10/site-packages 中。以下是ansible包的组织方式:

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
Salin selepas log masuk
 

有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

Salin selepas log masuk
 

搜索路径

当你导入一个模块时,Python将根据搜索路径执行搜索算法,搜索路径是开始搜索的目录列表。搜索路径是通过 sys.path 可用的目录列表,您可以动态操作它(添加、删除或移动搜索路径中的项目)。 site-packages 目录始终存在。

要从 ansible/utils 导入 path.py 模块,您需要使用以下命令:

import ansible.utils.path
Salin selepas log masuk

要导入 pathencrypt

Pakej dalam Python hanyalah folder yang mengandungi berbilang fail Python dan harus mempunyai fail __init__.py. Fail __init__.py menunjukkan bahawa direktori ialah pakej. Fail __init__.py boleh kosong atau mengandungi beberapa kod boleh laku.

Pakej ialah penjelmaan konsep ruang nama hierarki Python. Memetik Zen of Python:

"Ruang nama ialah idea yang bagus - mari lakukan lebih banyak daripadanya!"

Untuk melihat keseluruhan Python Zen, masukkan import this dalam sesi interaktif Python:

import ansible.utils.path
import ansible.utils.encrypt
Salin selepas log masuk
,

Ruang nama membantu mengatur kod dan mengelakkan konflik penamaan. Ini penting apabila berbilang orang bekerja bersama atau menggunakan pakej yang dibangunkan oleh orang lain.

Walaupun pakej mewakili hierarki subpakej dan modul (iaitu fail), hierarki itu tidak perlu berdasarkan sistem fail, di mana pakej dan subpakej ialah direktori dan subdirektori. Ia jauh lebih fleksibel daripada itu.

Buat pakej Python

Mari kita mulakan dengan contoh mudah. Di bawah ini kami mempunyai pakej yang dipanggil simple_package yang mengandungi dua modul Python.

import os.path
Salin selepas log masuk
  • __init__.py: Menunjukkan bahawa ia adalah pakej
  • tasks.py dan views.py ialah modul

Pakej perisian pihak ketiga

Mari kita lihat pakej yang dipanggil ansible. Ia bukan pakej dalam perpustakaan standard. Anda akan melihat kemudian cara mencari dan memasang pakej pihak ketiga. Sekarang, mari kita lihat struktur fail direktori.

Pakej ini biasanya dipasang ke dalam direktori pakej tapak jurubahasa Python, di suatu tempat di bawah lib (bergantung pada versi, sistem pengendalian dan pengedaran).

Sebagai contoh, pada Mac, Python 3.10 akan ditempatkan dalam /lib/python3.10/site-packages. Berikut ialah cara pakej ansible diatur: 🎜
pip install wheel.
Salin selepas log masuk
Salin selepas log masuk
, 🎜Terdapat 6 modul dan 18 direktori. Setiap direktori adalah sub-pakej pakej ansible utama. Melihat pada direktori ansible/utils, kita dapat melihat bahawa ia mengandungi modul lain dan juga sub-pakej: 🎜
pip install <package_name>
Salin selepas log masuk
Salin selepas log masuk
,

Laluan carian🎜 🎜Apabila anda mengimport modul, Python akan melaksanakan algoritma carian berdasarkan laluan carian, iaitu senarai direktori untuk mula mencari. Laluan carian ialah senarai direktori yang tersedia melalui sys.path dan anda boleh memanipulasinya secara dinamik (tambah, padam atau alihkan item dalam laluan carian). Direktori pakej tapak sentiasa wujud. 🎜 🎜Untuk mengimport modul path.py daripada ansible/utils anda perlu menggunakan arahan berikut: 🎜
pip install ansible
Salin selepas log masuk
Salin selepas log masuk
🎜Untuk mengimport modul path dan encrypt, gunakan arahan berikut: 🎜
pip install ansible==7.0
Salin selepas log masuk
Salin selepas log masuk
🎜Jika anda juga ingin menggunakan modul os.path standard, anda akan menggunakan arahan berikut: 🎜 rrreee 🎜Kini anda boleh menggunakan satu atau kedua-dua modul laluan tanpa bercanggah disebabkan ruang nama yang dimilikinya. 🎜 🎜Teroka perpustakaan standard🎜 🎜Perpustakaan standard mempunyai banyak pakej. Setiap kali anda perlu menyelesaikan tugasan tetapi tidak pasti caranya, ia berbaloi untuk menerokainya. Untuk sebarang tugas biasa, seperti matematik, penyepaduan shell, penyepaduan sistem pengendalian, manipulasi rentetan, rangkaian dan format fail biasa, kemungkinan besar terdapat pakej yang direka bentuk dengan baik, berprestasi baik dan teruji dalam pustaka standard 🎜 🎜Anda benar-benar boleh mempercayai pakej perpustakaan standard kerana masuk ke perpustakaan standard adalah masalah besar. Pakej ini sama ada direka oleh pembangun teras Python atau telah disemak dan digunakan secara meluas di lapangan sebagai perpustakaan pihak ketiga sebelum menjadikannya pustaka standard. 🎜 🎜Berikut adalah semua pakej dalam perpustakaan standard yang dianjurkan mengikut topik. 🎜 🎜PyPI🎜 🎜Perpustakaan standard sangat bagus, tetapi selalunya terdapat ciri khas yang anda perlukan yang bukan standard. Ini tidak bermakna anda perlu menulisnya dari awal. Python mempunyai komuniti yang bertenaga dan aktif yang membangunkan dan berkongsi sejumlah besar kod secara percuma. Masukkan PyPI: Indeks Pakej Python. PyPI mengehoskan semua pakej perisian yang tersedia secara umum dan menyediakan kedai sehenti untuk menyemak imbasnya. 🎜

浏览 PyPI

PyPI 将包组织在可浏览的索引中。您可以按主题、环境、框架、开发、状态、目标受众、许可证、自然语言、编程语言(是的,有支持多种编程语言的 Python 包)和操作系统来浏览和搜索。

截至 2021 年,PyPI 不再显示软件包的下载统计信息,因为维护统计信息所需的资源导致其效率低下。

安装软件包

有两种方法可以从 PyPI 安装软件包。您可以下载该软件包,然后运行 ​​python setup.py install。但现代的方法是使用 pip、setuptools 和wheel。

从 Python 3.4 和 Python 2.79 开始默认包含 Pip 和 setuptools,但您需要升级到最新版本:

  • Linux/macOS:pip install -U pip setuptools
  • Windows:python -m pip install -U pip setuptools
但是,不再支持 Python 2,因此您应该已经使用 Python 3.0 或更高版本来提高性能。

使用pip安装wheel:

pip install wheel.
Salin selepas log masuk
Salin selepas log masuk

要使用 pip 安装软件包,请发出此命令。

pip install <package_name>
Salin selepas log masuk
Salin selepas log masuk

其中 package_name 是包的名称。例如,要安装 Ansible,命令如下所示:

pip install ansible
Salin selepas log masuk
Salin selepas log masuk

如果需要特定版本,也可以指定如下:

pip install ansible==7.0
Salin selepas log masuk
Salin selepas log masuk

Python 包始终安装到环境中。我在这里不会介绍的一种常见做法是使用虚拟环境来管理具有不同解释器和/或不同安装包集的多个独立的 Python 安装。您可以在此处阅读有关虚拟环境的更多信息。

最佳实践

Python 打包权威提供了大量有关打包最佳实践的指导。这很重要,因为这是一个正在积极开发的领域,并且建议会快速发展。

此外,如果您想做一些特别的事情,例如从替代存储库而不是 PyPI 安装软件包或以更复杂的方式使用 pip,您会发现精彩的讨论和实用的建议。

结论

当您是 Python 初学者时,您会学习核心语言并享受使用它的乐趣。很快您就会发现标准库,并且随着您获得更多经验,您会从它的丰富性中受益越来越多。

作为 Pythonista,您发展的下一阶段是将 Python 社区在 PyPI 上带来的巨大优势融入到您的系统中。包作为可重用 Python 代码的部署单元使这个生态系统得以实现。

Atas ialah kandungan terperinci Terokai penggunaan pakej Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan