Mengapa menggunakan python -m pip

Halo lagi. Untuk mengantisipasi dimulainya utas baru pada kursus Pembelajaran Mesin , kami ingin berbagi terjemahan artikel, yang memiliki hubungan tidak langsung yang cukup dengan ML, tetapi tentunya akan bermanfaat bagi pelanggan blog kami.





Mariatta , seorang pengembang Kanada, bertanya pada python -m pip di Twitter, memintanya untuk berbicara tentang idiom ini dan menjelaskan cara kerjanya.

Baru-baru ini saya mengetahui bahwa Anda perlu menulis python -m pip daripada instalasi pip yang biasa, tetapi sekarang saya tidak dapat mengingat siapa yang saya dengar. Mungkin dari @brettsky atau @zooba . Apakah ada di antara Anda yang memiliki posting blog sehingga saya dapat membaginya dengan pembaca?
- Mariatta ( @mariatta ) 29 Oktober 2019 ( https://twitter.com/mariatta/status/1189243515739561985?ref_src=twsrc%5Etfw )


Saya tidak yakin apa yang saya katakan kepada Mariatta tentang python -m pip , tetapi ada kemungkinan bahwa itu adalah saya, karena saya meminta instruksi untuk menginstal paket menggunakan PyPI ditulis dengan cara ini sejak 2016. Jadi, artikel ini harus menjelaskan apa itu python -m pip dan mengapa Anda harus menggunakannya saat memulai pip .

Apa itu python -m pip?


Sebagai permulaan, python -m pip mengeksekusi pip menggunakan versi Python yang Anda tentukan untuk pernyataan python. Dengan demikian, /usr/bin/python3.7 -m pip berarti Anda menjalankan pip untuk juru bahasa yang terletak di /usr/bin/python3.7 . Anda dapat membaca dokumentasi tentang flag -m jika Anda tidak tahu cara kerjanya (omong-omong, ini sangat berguna).

Mengapa menggunakan python -m pip bukan pip / pip3?


Anda dapat mengatakan: "Oke, tapi mengapa saya tidak bisa menggunakan pip dengan menjalankan perintah pip ?" Jawabannya adalah: "Ya, tetapi Anda akan memiliki kontrol yang lebih sedikit terhadapnya." Saya akan menjelaskan apa artinya "kurang mengontrol" dengan sebuah contoh.

Misalkan saya memiliki dua versi Python diinstal, misalnya, Python 3.7 dan 3.8 (ini sangat umum di antara orang-orang yang bekerja di Mac OS atau Linux, belum lagi fakta bahwa Anda mungkin ingin bermain dengan Python 3.8, dan Anda sudah memiliki Python 3.7). Jadi, jika Anda mengetik pip di terminal, untuk juru bahasa Python mana Anda akan menginstal paket?

Tanpa informasi lebih rinci Anda tidak akan tahu jawabannya. Pertama, Anda perlu memahami apa yang ada di PATH, yaitu, /usr/bin berjalan lebih dulu atau /usr/local/bin (yang merupakan tempat paling umum untuk menginstal Python, dengan cara biasanya /usr/local/ pergi dulu). Jadi, Anda ingat di mana Anda menginstal Python 3.7 dan 3.8 dan mereka adalah direktori yang berbeda, dan Anda akan tahu apa yang ada di PATH terlebih dahulu. Misalkan Anda menginstal keduanya secara manual, mungkin Python 3.7.3 sudah diinstal sebelumnya pada sistem Anda, dan Anda menginstal Python 3.7.5. Dalam hal ini, kedua versi Python diinstal di /usr/local/bin . Bisakah Anda memberi tahu saya sekarang pip apa yang sekarang terpasang?

Anda tidak tahu jawabannya. Jika Anda tidak tahu kapan setiap versi diinstal, dan Anda memahami bahwa versi terbaru dari pip ditulis ke /usr/local/bin/pip , tetapi Anda tidak tahu penerjemah mana yang akan digunakan untuk perintah pip . Sekarang Anda dapat mengatakan: "Saya selalu menginstal versi terbaru, sehingga itu berarti bahwa Python 3.8.0 akan diinstal terakhir, karena itu lebih baru daripada, katakanlah, 3.7.5." Oke, tetapi apa yang terjadi ketika Python 3.7 keluar .6? Pip Anda tidak lagi digunakan dari Python 3.8, tetapi dari Python 3.7.

Ketika Anda menggunakan python -m pip dengan juru bahasa python spesifik yang Anda butuhkan, semua ambiguitas menghilang. Jika saya menulis pip python3.8 -m , saya tahu persis pip mana yang akan digunakan dan paket yang akan diinstal untuk Python 3.8 (hal yang sama akan terjadi jika saya menunjukkan python3.7).

Jika Anda menggunakan Windows, maka Anda memiliki insentif tambahan untuk menggunakan python -m pip , karena memungkinkan pip untuk memperbarui sendiri. Sebagian besar karena pip.exe dianggap berjalan ketika Anda menulis pip install --upgrade pip . Pada titik ini, Windows tidak akan memungkinkan Anda untuk menginstal ulang pip.exe . Namun, jika Anda melakukan instalasi python-m pip --upgrade pip , Anda mengatasi masalah ini saat python.exe diluncurkan, bukan pip.exe .

Dan apa yang terjadi ketika saya berada di lingkungan yang diaktifkan?


Biasanya, ketika saya menjelaskan esensi artikel ini kepada orang-orang, selalu ada seseorang yang akan berkata: "Saya selalu menggunakan lingkungan virtual, dan ini tidak berlaku untuk saya." Sebagai permulaan, SELALU akan baik untuk menggunakan lingkungan virtual! (Saya akan menjelaskan mengapa saya berpikir demikian dalam salah satu artikel saya berikutnya!) Tapi jujur, saya masih bersikeras menggunakan python -m pip , bahkan jika, sebenarnya, ini tidak perlu.

Pertama, jika Anda menggunakan Windows, Anda masih ingin menggunakan python-m pip sehingga Anda dapat memperbarui pip di lingkungan Anda.

Kedua, bahkan jika Anda menggunakan sistem operasi yang berbeda, saya akan mengatakan bahwa Anda masih perlu menggunakan python-m pip , karena itu akan berfungsi terlepas dari situasinya. Dia akan memperingatkan Anda tentang kesalahan jika Anda lupa mengaktifkan lingkungan, dan siapa pun yang melihat Anda akan mengadopsi praktik terbaik. Dan secara pribadi, saya tidak berpikir bahwa menabung 10 penekanan tombol adalah harga yang signifikan karena tidak menggunakan praktik yang baik. Dan perintah ini juga akan membantu Anda mencegah kesalahan saat menulis skrip otomatisasi yang akan melakukan operasi yang jelas salah jika Anda lupa untuk mengaktifkan lingkungan.

Secara pribadi, ketika saya menggunakan alat apa pun yang pekerjaannya tergantung pada juru bahasa mana yang memulai, saya selalu menggunakan -m , terlepas dari apakah lingkungan virtual diaktifkan atau tidak. Selalu penting bagi saya untuk memahami interpreter Python yang saya gunakan.

SELALU gunakan lingkungan! Jangan letakkan semuanya secara berurutan di penerjemah global!


Ketika kita berbicara tentang cara menghindari kebingungan saat memasang dengan Python, saya ingin menekankan bahwa kita tidak boleh menginstal apa pun pada juru bahasa Python global ketika kita bekerja secara lokal (kontainer adalah masalah yang sama sekali berbeda)! Jika ini adalah Python pra-instal sistem Anda, maka jika Anda menginstal versi perpustakaan yang tidak kompatibel yang diandalkan OS Anda, maka Anda benar-benar akan merusak sistem.

Tetapi bahkan jika Anda menginstal salinan python secara terpisah untuk Anda sendiri, saya masih sangat menyarankan untuk tidak menginstalnya secara langsung dalam pengembangan lokal. Pada akhirnya, Anda akan menggunakan berbagai paket dalam proyek Anda yang mungkin saling bertentangan, dan Anda tidak akan memiliki gagasan yang jelas tentang ketergantungan dalam proyek Anda. Jauh lebih baik untuk menggunakan lingkungan untuk mengisolasi proyek dan alat individu untuk mereka dari satu sama lain. Komunitas Python menggunakan dua jenis lingkungan: lingkungan virtual dan lingkungan conda. Bahkan ada cara khusus untuk menginstal alat Python secara terpisah.

Jika Anda perlu menginstal alat


Untuk pemasangan alat yang berdiri sendiri , saya dapat merekomendasikan menggunakan pipx . Setiap alat akan menerima lingkungan virtualnya sendiri, agar tidak bertentangan dengan yang lain. Jadi, jika Anda hanya ingin memiliki satu instalasi, misalnya, Black , Anda dapat bekerja tanpa merusak satu-satunya instalasi mypy Anda .

Jika Anda memerlukan lingkungan proyek (dan Anda tidak menggunakan konda)


Ketika Anda perlu membuat lingkungan untuk proyek, saya pribadi selalu beralih ke lingkungan virtual dan vv . Ini termasuk dalam stdlib Python, jadi selalu tersedia menggunakan python-m venv (kecuali, tentu saja, Anda menggunakan Debian atau Ubuntu, dalam hal ini Anda mungkin perlu menginstal paket apt python3-venv ). Sedikit sejarah: Saya benar-benar menghapus perintah pyvenv lama yang dipasang Python untuk membuat lingkungan virtual menggunakan venv , untuk alasan yang sama mengapa Anda perlu menggunakan python -m pip bukan pip . Artinya, tidak jelas juru bahasa mana yang Anda buat lingkungan virtual menggunakan perintah pyvenv lama. Dan ingat bahwa Anda tidak perlu mengaktifkan lingkungan untuk menggunakan penerjemah yang terkandung di dalamnya, karena .venv/bin/python berfungsi serta mengaktifkan lingkungan dan memasukkan perintah python .

Saat ini, beberapa pengembang masih lebih suka virtualenv , karena tersedia dalam Python 2 dan memiliki beberapa fitur tambahan. Secara pribadi, saya tidak begitu tertarik pada fitur tambahan, dan memiliki venv terintegrasi berarti saya tidak perlu menggunakan pipx untuk menginstal virtualenv di setiap mesin. Tetapi jika venv tidak sesuai dengan kebutuhan Anda dan Anda menginginkan lingkungan virtual, maka lihat apakah virtualenv menawarkan apa yang Anda butuhkan.

Jika Anda menggunakan conda


Jika Anda menggunakan conda , Anda dapat menggunakan lingkungan conda untuk mendapatkan efek yang sama dengan lingkungan virtual yang disediakan oleh venv . Saya tidak akan membahas apakah Anda perlu menggunakan conda atau venv dalam situasi spesifik Anda, tetapi jika Anda menggunakan conda , maka Anda tahu bahwa Anda dapat (dan harus) membuat lingkungan conda untuk pekerjaan Anda, alih-alih memasang semuanya di Anda sendiri instalasi sistem. Jadi Anda bisa mendapatkan pemahaman yang jelas tentang dependensi apa yang dimiliki proyek Anda (dan ini adalah alasan yang baik untuk menggunakan miniconda alih-alih anaconda penuh, karena yang pertama kurang dari sepersepuluh volume yang terakhir).

Selalu ada wadah


Bekerja dalam sebuah wadah adalah cara untuk tidak berurusan dengan lingkungan sama sekali, karena seluruh "mesin" Anda akan menjadi lingkungan yang terpisah. Sampai Anda telah menginstal Python dalam sistem wadah, Anda harus dapat melakukan instalasi global dengan aman sehingga wadah Anda tetap sederhana dan mudah.

Saya ulangi bahwa Anda benar-benar memahami esensi ...
Jangan menginstal apa pun di juru bahasa Python global Anda! Selalu berusaha menggunakan lingkungan untuk pengembangan lokal!

Saya tidak bisa lagi mengatakan berapa kali saya harus membantu seseorang yang berpikir bahwa pip diinstal dalam satu interpreter Python, tetapi sebenarnya diinstal pada yang lain. Dan jumlah yang tak terukur ini juga berlaku pada saat-saat ketika orang merusak seluruh sistem atau bertanya-tanya mengapa mereka tidak dapat menginstal sesuatu yang bertentangan dengan beberapa hal lain yang telah mereka tetapkan sebelumnya untuk proyek lain, dll. karena fakta bahwa mereka tidak repot-repot mengkonfigurasi lingkungan pada mesin lokal mereka.

Karena itu, agar Anda dan saya dapat tidur nyenyak, gunakan python-m pip dan cobalah untuk selalu menggunakan lingkungan.

Source: https://habr.com/ru/post/id475392/


All Articles