Saya baru di Ubuntu, jadi mohon ikut saya. Saya telah menginstal pip
menggunakan perintah ini: sudo apt-get -y install python-pip
. Lalu aku diinstal NLTK menggunakan perintah pada website mereka, yang: sudo pip install -U nltk
. Tetapi kemudian saya menemukan pertanyaan yang mengatakan bahwa semua yang saya lakukan adalah "praktik yang rusak". Garis yang paling mengejutkan saya adalah bahwa penggunaan pada sudo pip
dasarnya salah dan memberi pip
terlalu banyak kekuatan dapat merusak file sistem operasi. Adakah yang bisa memvalidasi klaim ini?
Catatan - Saya hanya menggunakan sudo
karena ketika saya mencoba perintah apt-get -y install python-pip
itu memberi saya 2 kesalahan:
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
package-management
permissions
python
pip
apa apa apa
sumber
sumber
sudo pip install
pada dasarnya salah. - dari stackoverflow.com/a/33004920/95735sudo pip install
sama buruknya dengancurl "some-url" | sudo bash
pemasangan. Demikian pula, kami telah beberapa kali di mana beberapa pengembang digunakansudo pip install
untuk menginstal beberapa dependensi pada workstation mereka, kemudian memeriksa kode yang rusak ke repo karena filerequirements.txt
atausetup.py
hilang apa pun yang mereka instal, dan semua orang harus mencari tahu apa dependensi yang diperlukan sementara pria itu sedang berlibur.Jawaban:
Kedua
sudo pip install
dan varian lainnya yang umum yangsudo -H pip install
harus tidak didorong karena merupakan risiko keamanan untuk hak penggunaan root untuk menggunakanpip
untuk menginstal paket Python dari PyPI (Python Package Index).Dari https://stackoverflow.com/a/21056000/486919 (penekanan pada saya):
Seperti disebutkan di https://security.stackexchange.com/a/79327/8761 , penting untuk dicatat bahwa siapa pun dapat mengunggah paket Python, termasuk yang berbahaya, ke PyPI.
Singkatnya, sesuai dengan prinsip privilege paling tidak , jangan gunakan
sudo
denganpip
menginstal paket Python dari PyPI kecuali Anda benar-benar perlu. Sebagai gantinya, pertimbangkan untuk menggunakanpip install --user
(perhatikan bahwapip install
tanpasudo
flag / opsi tambahan secara defaultpip install --user
di Ubuntu saat ini) atau lingkungan virtual (sepertivirtualenv
). Jika Anda melihat orang merekomendasikansudo pip
atausudo -H pip
, tolong beri tahu mereka untuk tidak melakukannya.sumber
sudo pip install
dapat menghapus instalasi "lama" paket Python yang diinstal sistem, yang dapat mempersulit peningkatan atau penghapusan paket OS tersebut.sudo pip uninstall
tidak membantu di sini, karena menghapus paket baru tetapi tidak mengembalikan file dari yang lama. (Kolega saya R. Zagar menjelaskan lebih lanjut dalam jawaban lain.)Anda harus menggunakan
sudo
untuk menginstal pip dengan apt (sudo apt install python-pip
), tetapi seperti yang dinyatakan dalam jawaban edwinksl Anda tidak boleh menggunakansudo
untuk menginstal paket dengan pip , Anda harus menggunakanpip install --user <package>
untuk menginstal hanya untuk pengguna Anda, atau menggunakan virtualenv untuk lebih jauh membatasi ruang lingkup paket .Apt menginstal paket dari repositori Ubuntu, sedangkan pip menginstal paket yang diunggah pengguna dari PyPi yang mungkin berbahaya.
sumber
Dan untuk jawaban yang lebih mudah:
sudo apt-get install ...
, begitulah cara alat itu dirancang untuk bekerja.sudo [-H]
denganpip install
adalah mungkin & opsional, tergantung pada apa yang ingin Anda lakukan (dan karenanya, "kontroversi").Salah satu motto Python adalah "Seharusnya ada satu - dan lebih disukai hanya satu - cara yang jelas untuk melakukannya." Dan seperti kebanyakan moto, itu rusak dengan gembira sinis yang tampaknya pada setiap kesempatan. (Itu sebabnya ada motto, saya kira.) Sayangnya, dalam pendapat saya yang paling sederhana, ekosistem Python terdiri dari banyak aturan "keras & cepat" yang saling bertentangan , tidak pernah dilanggar ... kecuali ketika "yada yada yada" (iblis, detail, dll). Dalam hampir semua kasus, ini disebabkan oleh evolusi historis dari bahasa & alat (dan yang ingin / membutuhkan pelajaran sejarah ketika mereka hanya ingin melanjutkan pekerjaan mereka) - tetapi juga dapat disebabkan oleh perbedaan dalam Mac / Win / * Platform Nix (mis. Unix / Linux memiliki mentalitas yang sama,ambil semua "praktik yang rusak" & "yang secara inheren salah ini" kultus kargo dengan sedikit garam. Beberapa sebenarnya sangat berarti. (Lainnya adil, yah, berarti.)
Pertama-tama, daripada "instalasi per-pengguna" dasar, Anda hampir selalu lebih suka virtualenv, karena sungguh, itu mungkin yang akhirnya Anda perlukan. Jadi sebaiknya Anda mulai dengan itu sekarang. Bagaimana ini dilakukan, tepatnya, "tergantung" (lihat motto Python, di atas). Jika Anda menggunakan Conda (kebanyakan untuk Mac & Windows), itu akan diatur menggunakan Conda . Jika menggunakan "pure" Python [sic] , itu tergantung pada versi mana & apa yang Anda miliki, tetapi virtualenvwrapper cukup berguna.
Kedua, seperti contoh tandingan pada aturan "tidak pernah sudo", Anda dapat memilih
sudo -H pip install -U numpy
, yang sangat baik, bahkan menguntungkan, karena dapat memungkinkan seseorang untuk menghindari mengunduh / menginstal ulang / memelihara perpustakaan besar, di mana Anda hanya ingin / perlu satu versi, ke dalam setiap virtualenv secara terpisah. Kerangka kerja besar dan populer seperti scikit-learn, NumPy, matplotlib, SciPy, panda, dll., Dapat dipasang sekali & selesai dan digunakan kembali di seluruh lingkungan . Lebih lanjut, sys-admin Anda yang ramah mungkin dapat menginstal ini untuk setiap pengguna pada suatu sistem - dan jelas mereka akan melakukan ini melaluisudo
, juga, misalnya, untuk instalasi yang lebih rumit, seperti TensorFlow.Dan, terakhir, jika Anda menginstal beberapa pustaka pihak ke-3 acak yang melakukan ini-dan-itu (Twitter API, teks munging, pemformatan kode, dll), maka saya sepenuhnya setuju - jangan menginstalnya sebagai root via sudo. Tentu, instal sebagai pengguna Anda saat ini. Tapi ingat, akun pengguna Anda memiliki semua hal yang sangat penting .
sumber
malloc
mana Anda tidak perlu melakukannya. The--user
flag melakukan apa OP itu meminta dan tidak memerlukan izin khusus. Anda merusak poin baik Anda tentang virtualenv dalam proses ... tidak ada "kargo-kultus" tentang semua ini.Menggunakan "sudo pip install" dapat dan akan menimpa konten python yang disediakan oleh vendor OS Anda. Ketika itu terjadi, semua paket vendor yang terkena dampak ini tidak akan lulus "rpm --verify" dan paket Anda tampaknya rusak.
Apakah Anda ingin menggunakan alat administrasi sistem yang telah diuji oleh vendor OS Anda , atau apakah boleh menggunakan komponen yang belum diuji yang Anda unduh dari internet?
Ketika, bukan jika, paket jahat diunggah ke PyPI ... orang yang menggunakan "sudo pip install" akan akhirnya menjalankan muatan berbahaya itu dengan hak istimewa sistem penuh. Apakah kamu menginginkan itu? (#principleofleastprivilege)
Jika itu hanya laptop Anda, dan Anda hanya mempertaruhkan beberapa gambar kucing, maka risikonya mungkin rendah ... tetapi jika itu adalah sistem multi-pengguna, maka risikonya sekarang dikalikan dengan N. Jika Anda memiliki data pada sistem yang memiliki nilai, atau ketersediaan atau keandalan sistem memiliki nilai, maka risikonya juga naik.
Jangan ragu untuk memilih petualangan Anda sendiri, tetapi silakan dapatkan persetujuan dari pengguna lain yang dapat dipengaruhi oleh pilihan Anda. Mereka mungkin tidak nyaman dengan tingkat risiko yang sama seperti Anda.
sumber
Untuk menambah jawaban ini: Saya tidak tahu tentang Ubuntu, tetapi pada Fedora saya dapat menggunakan
sudo dnf install python3-numpy
format untuk menginstal paket BANYAK berguna bagi saya. Ini tidak memiliki kelemahan menjadi tidak aman (distro repo maintainer telah memvalidasi paket), tetapi juga memungkinkan Anda untuk menginstal seluruh sistem. Hanya kekurangannya adalah bahwa versi repro distro mungkin sedikit tertinggal paket-paket di PyPI.sumber
Tidak, ini benar. Saya tidak dapat memvalidasi klaim ini. Saya selalu menggunakan
sudo -H
denganpip
.pip
hanya dapat merusak file sistem operasi sebanyakapt
. Hanya tidak digunakansudo
denganpip
ketika Anda ingin menginstal hanya untuk pengguna itu.sumber
pip
sistem? Jika Anda seorang sysadmin, mungkin itu cerita yang berbeda.