() translation by (you can also view the original English article)
Paket Python memungkinkan Anda memecah sistem besar dan mengatur modul mereka dengan cara yang konsisten yang dapat digunakan dan digunakan kembali oleh Anda dan orang lain secara efisien. Moto Python tentang "Batteries Included" berarti bahwa ia dilengkapi dengan banyak paket yang berguna di perpustakaan standarnya.
Tetapi ada juga banyak paket pihak ketiga yang luar biasa yang dapat Anda manfaatkan. Dalam tutorial ini Anda akan mempelajari semua yang perlu Anda ketahui tentang paket apa saja yang tepat, cara mengimpor modul dari paket, menjelajahi paket bawaan di perpustakaan standar Python, dan memasang paket pihak ketiga.
Apakah Itu Paket?
Sebelum kita dapat berbicara tentang paket, mari kita bicara tentang modul. Modul adalah file sumber dengan ekstensi *.py di mana Anda (dan orang lain) meletakkan fungsi dan kelas yang membentuk program Anda. Paket adalah manifestasi dari konsep namespace hierarkis Python. Untuk mengutip dari Zen of Python:
"Namespace adalah satu ide bagus yang mengagumkan -- mari lakukan lebih banyak dari itu!"
Untuk melihat seluruh Zen Python, ketik import this
dalam sesi interaktif Python:
1 |
import this |
2 |
|
3 |
The Zen of Python, by Tim Peters |
4 |
|
5 |
|
6 |
|
7 |
Beautiful is better than ugly. |
8 |
|
9 |
Explicit is better than implicit. |
10 |
|
11 |
Simple is better than complex. |
12 |
|
13 |
Complex is better than complicated. |
14 |
|
15 |
Flat is better than nested. |
16 |
|
17 |
Sparse is better than dense. |
18 |
|
19 |
Readability counts. |
20 |
|
21 |
Special cases aren't special enough to break the rules. |
22 |
|
23 |
Although practicality beats purity. |
24 |
|
25 |
Errors should never pass silently. |
26 |
|
27 |
Unless explicitly silenced. |
28 |
|
29 |
In the face of ambiguity, refuse the temptation to guess. |
30 |
|
31 |
There should be one-- and preferably only one --obvious way to do it. |
32 |
|
33 |
Although that way may not be obvious at first unless you're Dutch. |
34 |
|
35 |
Now is better than never. |
36 |
|
37 |
Although never is often better than *right* now. |
38 |
|
39 |
If the implementation is hard to explain, it's a bad idea. |
40 |
|
41 |
If the implementation is easy to explain, it may be a good idea. |
42 |
|
43 |
Namespaces are one honking great idea -- let's do more of those! |
Namespace membantu mengatur kode dan mencegah konflik penamaan. Ini sangat penting ketika banyak orang bekerja sama atau ketika menggunakan paket yang dikembangkan oleh orang lain.
Sementara paket mewakili hirarki sub-paket dan modul, yang merupakan file hirarki tidak harus berbasis sistem file di mana paket dan sub-paket adalah direktori dan sub-direktori. Jauh lebih fleksibel dari itu.
Paket Contoh
Mari kita lihat paket yang disebut "ansible". Ini bukan paket dari perpustakaan standar. Anda akan melihat nanti bagaimana menemukan dan memasang paket pihak ketiga. Sekarang, mari kita periksa struktur file direktori.
Paket-paket ini akan diinstal secara khusus ke direktori site-packages penterjemah Python, yang akan ditempatkan di suatu tempat (tergantung pada versi, OS, dan distribusi) di bawah "lib". Di Mac, untuk Python 2.7 itu akan ditempatkan di "/lib/python2.7/site-packages". Di sini adalah bagaimana paket "ansible" diatur:
1 |
tree ansible -L 1
|
2 |
|
3 |
ansible |
4 |
|
5 |
├── __init__.py |
6 |
|
7 |
├── cli |
8 |
|
9 |
├── compat |
10 |
|
11 |
├── config |
12 |
|
13 |
├── constants.py |
14 |
|
15 |
├── errors |
16 |
|
17 |
├── executor |
18 |
|
19 |
├── galaxy |
20 |
|
21 |
├── inventory |
22 |
|
23 |
├── module_utils |
24 |
|
25 |
├── modules |
26 |
|
27 |
├── parsing |
28 |
|
29 |
├── playbook |
30 |
|
31 |
├── plugins |
32 |
|
33 |
├── template |
34 |
|
35 |
├── utils |
36 |
|
37 |
└── vars |
38 |
|
39 |
|
40 |
|
41 |
15 directories, 2 files |
42 |
Ada dua modul dan 15 direktori. Setiap direktori adalah sub-paket dari paket ansible utama. Melihat ke dalam direktori ansible/utils, kita dapat melihat ini berisi modul tambahan dan bahkan satu lagi sub-paket:
1 |
tree ansible/utils -L 1
|
2 |
|
3 |
ansible/utils |
4 |
|
5 |
├── __init__.py |
6 |
|
7 |
├── boolean.py |
8 |
|
9 |
├── cmd_functions.py |
10 |
|
11 |
├── color.py |
12 |
|
13 |
├── debug.py |
14 |
|
15 |
├── display.py |
16 |
|
17 |
├── encrypt.py |
18 |
|
19 |
├── hashing.py |
20 |
|
21 |
├── listify.py |
22 |
|
23 |
├── module_docs.py |
24 |
|
25 |
├── module_docs_fragments |
26 |
|
27 |
├── path.py |
28 |
|
29 |
├── shlex.py |
30 |
|
31 |
├── unicode.py |
32 |
|
33 |
└── vars.py |
34 |
|
35 |
|
36 |
|
37 |
1 directory, 14 files |
Jalur Pencarian
Ketika Anda mengimpor modul, Python akan melalui algoritma pencarian berdasarkan jalur pencarian, yang merupakan daftar direktori untuk memulai pencarian. Jalur pencarian adalah daftar direktori yang tersedia melalui sys.path
, dan Anda dapat memanipulasinya secara dinamis (menambah, menghapus atau memindahkan item di jalur pencarian). Direktori site-packages selalu ada.
Untuk mengimpor modul path.py dari ansible/utils, Anda harus menggunakan perintah berikut:
import ansible.utils.path
Jika Anda juga ingin menggunakan modul os.oath standar, Anda akan menggunakan perintah berikut:
import os.path
Sekarang Anda dapat menggunakan salah satu atau kedua modul jalur tanpa konflik karena perbedaan namespace yang mereka miliki.
Menjelajahi Perpustakaan Standar
Perpustakaan standar memiliki banyak paket. Ada baiknya menjelajahinya kapan pun Anda perlu menyelesaikan beberapa tugas dan Anda tidak yakin caranya. Ada kemungkinan yang sangat tinggi bahwa untuk tugas tujuan umum seperti matematika, integrasi shell, integrasi OS, manipulasi string, jaringan dan format file umum, ada paket yang dirancang dengan baik, berperforma baik dan teruji di perpustakaan standar.
Anda benar-benar dapat mempercayai paket perpustakaan standar karena ini adalah masalah besar untuk masuk ke perpustakaan standar. Baik paket itu dirancang oleh pengembang inti Python atau sangat ditinjau ulang dan sering digunakan di lapangan sebagai perpustakaan pihak ketiga sebelum membuatnya menjadi perpustakaan standar.
Berikut ini semua paket di perpustakaan standar yang diatur berdasarkan topik.
PyPI
Perpustakaan standar luar biasa, tetapi akan sering ada beberapa fungsi khusus yang Anda butuhkan yang tidak standar. Itu tidak berarti Anda harus menulisnya dari awal. Python memiliki komunitas yang aktif dan aktif yang mengembangkan dan berbagi banyak kode dengan bebas. Masuk PyPI - Indeks Paket Python. PyPI menjadi tuan rumah semua paket yang tersedia untuk umum dan menyediakan toko serba ada untuk menjelajahinya.
Menjelajahi PyPI
PyPI mengatur paket-paket dalam indeks yang dapat dijelajahi. Anda dapat menelusuri dan mencari berdasarkan topik, lingkungan, kerangka kerja, pengembangan, status, audiens yang dituju, lisensi, bahasa alami, bahasa pemrograman (ya, ada paket Python yang mendukung banyak bahasa pemrograman), dan sistem operasi.
Ada juga perbedaan antara paket Python 2 dan Python 3, dan Anda dapat melihat seberapa populer sebuah paket dengan jumlah unduhan terbaru. Sebagai contoh, paket ansible tersedia di PyPI, dan berikut ini metadatanya:
1 |
Downloads (All Versions): |
2 |
|
3 |
5528 downloads in the last day |
4 |
|
5 |
72037 downloads in the last week |
6 |
|
7 |
289967 downloads in the last month |
8 |
|
9 |
Author: Ansible, Inc. |
10 |
|
11 |
Home Page: https://ansible.com/ |
12 |
|
13 |
Bug Tracker: http://github.com/ansible/ansible/ |
14 |
|
15 |
License: GPLv3 |
16 |
|
17 |
Categories |
18 |
|
19 |
Development Status :: 5 - Production/Stable |
20 |
|
21 |
Environment :: Console |
22 |
|
23 |
Intended Audience :: Developers |
24 |
|
25 |
Intended Audience :: Information Technology |
26 |
|
27 |
Intended Audience :: System Administrators |
28 |
|
29 |
License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) |
30 |
|
31 |
Natural Language :: English |
32 |
|
33 |
Operating System :: POSIX |
34 |
|
35 |
Programming Language :: Python :: 2.6 |
36 |
|
37 |
Programming Language :: Python :: 2.7 |
38 |
|
39 |
Topic :: System :: Installation/Setup |
40 |
|
41 |
Topic :: System :: Systems Administration |
42 |
|
43 |
Topic :: Utilities |
44 |
|
45 |
Package Index Owner: James.Laska, jimi, ansible |
46 |
|
47 |
Package Index Maintainer: mpdehaan, badger |
48 |
|
49 |
DOAP record: ansible-2.0.0.2.xml |
50 |
Menginstal Paket
Ada dua cara untuk menginstal paket dari PyPI. Anda dapat mengunduh paket dan menjalankan python setup.py install. Tetapi cara modern adalah menggunakan pip, setuptools dan wheel. Pip adalah singkatan dari Pip Installs Packages (ya, ini salah satu akronimnya) dan merupakan front end Anda untuk instalasi. Jika Anda memiliki Python 2 >=2.7.9 atau Python 3 >=3.4 diinstal dari python.org, Anda sudah memiliki pip dan setuptools, tetapi akan perlu untuk meng-upgrade ke versi terbaru: pip install -U pip setuptools
atau python -m pip install -U pip setuptools
pada Windows.
Gunakan pip untuk menginstal wheel: pip install wheel
.
Jika Anda menggunakan versi Python yang lebih lama, pertimbangkan untuk meningkatkan. Jika Anda tidak dapat melakukannya, Anda harus menginstal pip, setuptools dan wheel sendiri. Periksa instruksinya.
Paket Python selalu diinstal di sebuah lingkungan. Praktik umum yang tidak akan saya bahas di sini adalah menggunakan lingkungan virtual untuk mengelola beberapa instalasi independen Python dengan penterjemah yang berbeda dan/atau kumpulan paket terinstal yang berbeda.
Praktik Terbaik
Otoritas pengemasan Python memberikan banyak panduan tentang praktik terbaik seputar pengemasan. Ini penting karena merupakan area pengembangan aktif pengembangan dan rekomendasi berevolusi dengan cepat.
Juga, jika Anda ingin melakukan sesuatu yang istimewa seperti menginstal paket dari repositori alternatif, bukan PyPI atau menggunakan pip dengan cara yang lebih canggih, Anda akan menemukan diskusi yang bagus dan saran praktis.
Kesimpulan
Ketika Anda seorang pemula Python, Anda belajar bahasa inti dan bersenang-senang bermain dengannya. Anda akan segera menemukan perpustakaan standar, dan ketika Anda mendapatkan lebih banyak pengalaman, Anda akan mendapatkan lebih banyak manfaat dari kekayaannya.
Tahap berikutnya dalam evolusi Anda sebagai Pythonista adalah untuk menggabungkan kedahsyatan besar yang telah diberikan Python pada PyPI ke dalam sistem Anda. Paket sebagai unit penyebaran kode Python yang dapat digunakan kembali memungkinkan ekosistem ini.