apt-get install vs pip install

103

Saya agak bingung tentang kasus-kasus di mana perintah di atas harus digunakan ketika mengunduh paket python. Saya mencoba mengunduh paket bernama pyudev sesuai dengan jawaban dengan pertanyaan ini . Saya menjalankan perintah ini:

sudo pip install python-pyudev

tetapi menerima pesan berikut:

Downloading/unpacking python-pyudev

  Could not find any downloads that satisfy the requirement python-pyudev
Cleaning up...
No distributions at all found for python-pyudev
Storing complete log in /home/vineet/.pip/pip.log

Namun berikut ini bekerja dengan baik:

sudo apt-get install python-pyudev

Kapan apt-getseharusnya digunakan untuk menginstal paket dan kapan python-pipdigunakan?

Vineet Kaushik
sumber
2
pipdigunakan untuk menginstal paket python saja, tetapi apt-getdigunakan untuk menginstal semua paket apa pun.
Avinash Raj
3
ok..so mengapa pip tidak dapat menginstal python-pyudev?
Vineet Kaushik

Jawaban:

100

PyPI adalah indeks Paket Python - repositori modul python.

pipdigunakan untuk mengunduh dan menginstal paket langsung dari PyPI. PyPI diselenggarakan oleh Yayasan Perangkat Lunak Python . Ini adalah manajer paket khusus yang hanya menangani paket python.

apt-get digunakan untuk mengunduh dan menginstal paket dari repositori Ubuntu yang di-host oleh Canonical.

Beberapa perbedaan antara menginstal paket python dari apt-getdan pipadalah sebagai berikut:

  • Canonical hanya menyediakan paket untuk modul python yang dipilih. Padahal, PyPI memiliki banyak modul python yang lebih luas. Jadi, ada banyak modul python yang tidak dapat Anda instal menggunakan apt-get.

  • Canonical hanya menyelenggarakan versi tunggal dari paket apa saja (umumnya yang terbaru atau yang dirilis di masa lalu). Jadi, dengan apt-getkita tidak dapat memutuskan versi paket python yang kita inginkan. pipmembantu kami dalam situasi ini. Kami dapat menginstal versi paket apa pun yang sebelumnya telah diunggah di PyPI. Ini sangat membantu jika terjadi konflik dalam ketergantungan.

  • apt-getmenginstal modul python di lokasi seluruh sistem. Kami tidak bisa hanya menginstal modul di virtualenv proyek kami . pipmemecahkan masalah ini untuk kita. Jika kita menggunakan pipsetelah mengaktifkan virtualenv, cukup cerdas untuk hanya menginstal modul di virtualenv proyek kita. Seperti disebutkan dalam poin sebelumnya, jika ada versi paket python tertentu yang sudah diinstal di lokasi seluruh sistem, dan salah satu proyek kami membutuhkan versi yang lebih lama dari paket python yang sama, dalam situasi seperti itu kita dapat menggunakan virtualenv dan pip untuk menginstal versi paket python yang lebih lama tanpa konflik.

  • Seperti @Radu Rădeanu tunjukkan dalam jawaban ini , umumnya akan ada perbedaan dalam nama paket juga. Canonical biasanya menamai paket Python 2 sebagai python-<package_name>dan paket Python 3 sebagai python3-<package_name>. Sedangkan untuk pipkita umumnya hanya perlu menggunakan paket <package_name>Python 2 dan Python3.

Mana yang harus Anda gunakan:

Keduanya apt-getdan pipmerupakan manajer paket yang matang yang secara otomatis menginstal dependensi paket lain saat menginstal. Anda dapat menggunakan siapa saja sesuka Anda. Namun, jika Anda perlu menginstal versi paket python tertentu, atau menginstal paket dalam virtualenv, atau menginstal paket yang hanya di-host di PyPI; hanya pipakan membantu Anda mengatasi masalah itu. Kalau tidak, jika Anda tidak keberatan menginstal paket di lokasi seluruh sistem, tidak masalah apakah Anda menggunakan apt-getatau pip.

Aditya
sumber
5
Juga, Anda harus mencoba untuk menggunakan satu atau yang lain , dan tidak keduanya pipdan secara bersamaan apt-get.
earthmeLon
3
Cepat atau lambat, seseorang mungkin memerlukan paket atau versi yang tidak disediakan oleh apt-get. Karena menggunakan keduanya apt-getdan pipdapat menyebabkan konflik, haruskah saran selalu digunakan pipuntuk paket yang didukung oleh pip?
Abhishek Anand
2
@Abhishek, metode pilihan saya adalah selalu menggunakan Python melalui virtualenv .. Jadi, ya, saya lebih suka menggunakan pip over apt ..
Aditya
Itu membuka kaleng cacingnya sendiri dalam skenario tertentu. Katakanlah Anda menginstal sebagian besar paket Anda sudo piptanpa virtualenvkarena sebagian besar proyek Anda membutuhkan lingkungan yang sama (tetapi lebih luas daripada apa yang disediakan dengan instalasi Ubuntu bersih). Kemudian ketika Anda melakukan upgrade sistem dan Ubuntu memutuskan untuk meng-upgrade Python ke versi baru (seperti dengan zestyke artful- Python 3,5-3,6), semua paket pip-instal Anda di /usrtertinggal dan pip.get_installed_distributions()menghasilkan daftar kosong.
z33k
Menggunakan pip dalam konteks global benar-benar salah dan tidak boleh digunakan, karena itu akan mengacaukan pemasangan sistem python. pip dan apt-get hal yang sama sekali berbeda, dan itu salah untuk membandingkannya. Cobalah untuk menginstal modul python yang tergantung pada pustaka non-python lainnya dan Anda akan segera menyadari mengapa Anda perlu apt-get.
mestia
21

Seperti @AvinashRaj katakan dalam komentarnya , pipdigunakan untuk menginstal paket python saja, tetapi apt-getdigunakan untuk menginstal paket yang dibuat dalam bahasa pemrograman apa pun.

Masalah utama Anda adalah menemukan nama paket yang tepat dalam kedua kasus:

pip search pyudev

akan memberi Anda nama yang tepat untuk paket yang ingin Anda instal menggunakan pip install, as

apt-cache search pyudev

akan memberi Anda nama yang tepat untuk paket yang ingin Anda instal menggunakan apt-get install:

radu@Radu: ~ $ pip search pyudev
pyudev                    - A libudev binding
radu@Radu: ~ $ apt-cache search pyudev
python-pyudev - Python bindings for libudev
python3-pyudev - Python3 bindings for libudev

Jadi, dalam kesimpulan, koresponden sudo apt-get install python-pyudevadalah sudo pip install pyudev, tidak sudo pip install python-pyudev.

Sekarang tergantung pada Anda apa yang ingin Anda pilih saat Anda ingin menginstal paket python: pipatau apt-get. Lihat misalnya , T&J ini tentang perbedaan dalam menginstal paket menggunakan pipdan apt-get.

Radu Rădeanu
sumber
2

Cara pilihan saya adalah selalu menggunakan aptdan hanya dalam kasus modul belum tersedia di repositori Debian / Ubuntu untuk digunakan pip, tetapi hanya dalam konteks pengguna - --userbendera. Dengan menggunakan pipsalah satunya harus mendapatkan semua dependensi build terinstal dari katakanlah repositori Ubuntu atau menyediakannya sendiri yang bisa menjadi tugas yang membosankan. apt-getinstal paket biner saat pipmembangunnya setelah mengunduh. Seseorang seharusnya tidak menggunakan pip untuk menginstal modul ke lokasi sistem. Ini jelas salah. Selalu gunakan --userbendera untuk memasang modul ke lokasi rumah. PYTHONPATH yang dikonfigurasikan dengan benar, biarkan python untuk mengambil modul dari HOME terlebih dahulu dan kemudian modul sistem diinstal apt-get.

mestia
sumber