Ringkasan
Ada tiga kategori umum modul yang Anda hadapi:
- Program-program pendukung yang diinstal untuk semua pengguna dengan sistem paket OS. (Ini bahkan mungkin termasuk alat dan perpustakaan yang digunakan oleh orang-orang yang memprogram dalam Python; lihat di bawah ini.) Untuk ini Anda menggunakan paket OS di mana Anda bisa, dan
pip
menginstal ke direktori sistem jika diperlukan.
- Program-program pendukung yang diinstal oleh pengguna tertentu hanya untuk penggunaannya sendiri, dan juga untuk aspek-aspek tertentu dari penggunaan Python "sehari-hari" sebagai bahasa scripting. Untuk ini dia menggunakan
pip --user
, mungkin pyenv atau pythonz , dan alat dan taktik serupa.
- Mereka yang mendukung pengembangan dan penggunaan aplikasi tertentu. Untuk ini, Anda menggunakan
virtualenv
(atau alat serupa).
Setiap level di sini mungkin juga mendapatkan dukungan dari level sebelumnya. Sebagai contoh, pengguna kami di (2) mungkin mengandalkan juru bahasa Python yang diinstal melalui paket OS.
Mempelajari lebih detail:
Program dan Paket Sistem
Program yang ditulis dengan Python yang Anda ingin "jalankan" itu mudah: cukup gunakan alat instal OS dan biarkan mereka membawa apa pun yang mereka butuhkan; ini tidak berbeda dengan program non-Python. Ini kemungkinan akan membawa Python tools / libraries (seperti interpreter Python itu sendiri!) Yang mungkin mulai diandalkan oleh pengguna di komputer Anda; ini bukan masalah selama mereka memahami ketergantungan dan, idealnya, tahu cara alternatif untuk menanganinya pada host yang tidak menyediakan dependensi tersebut.
Contoh umum dan sederhana dari ketergantungan seperti itu adalah beberapa skrip pribadi saya ~/.local/bin/
yang dimulai dengan #!/usr/bin/env python
. Ini akan berfungsi dengan baik (asalkan berjalan di bawah Python 2) pada RH / CentOS 7 dan sebagian besar (tetapi tidak semua) menginstal Ubuntu; mereka tidak akan menggunakan instalasi Debian dasar atau Windows. Meskipun saya tidak menyukai lingkungan pribadi saya yang memiliki banyak ketergantungan pada paket OS (saya bekerja pada sejumlah OS yang berbeda), sesuatu seperti ini menurut saya cukup dapat diterima; rencana cadangan saya pada host langka yang tidak memiliki sistem Python dan tidak bisa mendapatkannya adalah untuk pergi dengan sistem Pengguna seperti yang dijelaskan di bawah ini.
Orang yang menggunakan sistem juru bahasa python juga biasanya tergantung pada sistem pip3
. Itu tentang di mana saya biasanya menarik garis pada dependensi sistem saya; semuanya dari virtualenv
depan saya berurusan dengan diri saya sendiri. (Misalnya, skrip aktivasi standar saya bergantung pada apa pun pip3
atau yang pip
ada di jalur, tetapi mengunduh salinannya sendiri virtualenv
untuk bootstrap lingkungan virtual yang dibuatnya.
Yang mengatakan, mungkin ada keadaan di mana sangat masuk akal untuk membuat lebih banyak lingkungan pengembangan tersedia. Anda mungkin memiliki antarmuka Python ke dalam paket yang kompleks (seperti DBMS) di mana Anda ingin menggunakan versi sistem itu dan Anda merasa yang terbaik adalah Anda juga membiarkan sistem memilih kode pustaka Python tertentu yang akan Anda gunakan untuk berbicara dengannya. Atau Anda mungkin menggunakan banyak host dengan lingkungan pengembangan dasar untuk kelas Python, dan merasa lebih mudah untuk mengotomatisasi dengan paket sistem standar.
Program dan Paket "Pengguna Sehari-hari"
Pengguna mungkin memiliki pustaka atau program Python yang tidak cocok dengan lingkungan virtual karena mereka ingin membantu menciptakan lingkungan virtual di tempat pertama (misalnya, virtualenvwrapper ) atau mereka hal-hal yang biasa Anda gunakan dari baris perintah bahkan ketika melakukan pekerjaan non-Python. Bahkan jika mereka memiliki kemampuan untuk menginstal versi sistem ini, mereka mungkin merasa lebih nyaman menginstalnya sendiri (misalnya, karena mereka ingin menggunakan versi terbaru dari alat dan dependensinya).
Umumnya pip --user
apa yang akan digunakan orang untuk ini, meskipun dependensi tertentu, seperti interpreter Python itu sendiri, memerlukan sedikit lebih dari itu. pyenv dan pythonz berguna untuk membangun penerjemah pribadi (apakah dipasang ~/.local/bin
sebagai penerjemah default atau tidak), dan tentu saja kita selalu bisa membangun "dengan tangan" dari sumber jika perpustakaan dev tersedia.
Saya mencoba untuk menjaga set minimal hal-hal yang diinstal di sini: virtualenvwrapper (karena saya menggunakannya terus-menerus) dan mungkin versi terbaru dari pip. Saya mencoba untuk menghindari dependensi di luar perpustakaan standar atau pada Python 3 untuk skrip pribadi yang saya tulis untuk digunakan di banyak host. (Meskipun kita akan melihat berapa lama saya bisa bertahan dengan itu karena saya semakin banyak memindahkan skrip pribadi ini ke Python.)
Pengembangan Aplikasi dan Lingkungan Runtime yang terpisah
Ini adalah hal virtualenv yang biasa. Untuk pengembangan Anda hampir selalu harus menggunakan virtualenv untuk memastikan bahwa Anda tidak menggunakan dependensi sistem, atau sering lebih dari satu untuk menguji terhadap versi Python yang berbeda.
Lingkungan virtual ini juga baik untuk aplikasi dengan banyak dependensi di mana Anda ingin menghindari mencemari lingkungan pengguna Anda. Misalnya saya biasanya membuat virtualenv untuk menjalankan notebook Jupyter dan sejenisnya.