Perbedaan antara 'python setup.py install' dan 'pip install'

109

Saya memiliki paket eksternal yang ingin saya instal ke virtualenv python saya dari file tar. Apa cara terbaik untuk menginstal paket?

Saya telah menemukan 2 cara yang dapat melakukannya:

  1. Ekstrak file tar, lalu jalankan python setup.py installdi dalam direktori yang diekstrak.
  2. pip install packagename.tar.gzdari contoh # 7 di https://pip.pypa.io/en/stable/reference/pip_install/#examples

Apakah jika ada perbedaan melakukannya dengan 2 cara ini.

pengguna2125465
sumber
5
Gunakan pip. Anda dapat menghapus paket dengannya.
Blender
"Dari sumber" seperti dalam "VCS checkout", atau seperti di sdist?
Apa yang "terbaik" tergantung pada kebutuhan Anda! Sudahkah Anda mencoba salah satu dari solusi ini dan gagal dalam beberapa hal? Atau apakah Anda bertanya apa perbedaan adalah antara pendekatan ini?
Martin Atkins
Di fedora, misalnya, menggunakan yum.
nyata

Jawaban:

112

Di permukaan, keduanya melakukan hal yang sama: melakukan salah satu python setup.py installatau pip install <PACKAGE-NAME>akan menginstal paket python untuk Anda, dengan sedikit keributan.

Namun, menggunakan pip menawarkan beberapa keuntungan tambahan yang membuatnya jauh lebih bagus untuk digunakan.

  • pip secara otomatis akan mengunduh semua dependensi untuk sebuah paket untuk Anda. Sebaliknya, jika Anda menggunakan setup.py, Anda sering kali harus mencari dan mengunduh dependensi secara manual, yang membosankan dan bisa membuat frustasi.
  • pip melacak berbagai metadata yang memungkinkan Anda dengan mudah menghapus dan memperbarui paket dengan satu perintah: pip uninstall <PACKAGE-NAME>dan pip install --upgrade <PACKAGE-NAME>. Sebaliknya, jika Anda menginstal paket menggunakan setup.py, Anda harus secara manual menghapus dan memelihara paket secara manual jika Anda ingin membuangnya, yang berpotensi rawan kesalahan.
  • Anda tidak lagi harus mengunduh file Anda secara manual. Jika Anda menggunakan setup.py, Anda harus mengunjungi situs web perpustakaan, mencari tahu di mana mengunduhnya, mengekstrak file, menjalankan setup.py... Sebaliknya, pip akan secara otomatis mencari Indeks Paket Python (PyPi) untuk melihat apakah paket itu ada di sana, dan akan mengunduh, mengekstrak, dan menginstal paket secara otomatis untuk Anda. Dengan beberapa pengecualian, hampir setiap pustaka Python yang benar-benar berguna dapat ditemukan di PyPi.
  • pip akan memudahkan Anda memasang roda, yang merupakan standar baru distribusi Python. Info selengkapnya tentang roda .
  • pip menawarkan manfaat tambahan yang terintegrasi dengan baik dengan penggunaan virtualenv, yaitu program yang memungkinkan Anda menjalankan banyak proyek yang membutuhkan pustaka yang bertentangan dan versi Python di komputer Anda. Info lebih lanjut .
  • pip dibundel secara default dengan Python pada Python 2.7.9 pada seri Python 2.x, dan pada Python 3.4.0 pada seri Python 3.x, membuatnya lebih mudah digunakan.

Jadi pada dasarnya, gunakan pip. Ini hanya menawarkan peningkatan atas penggunaan python setup.py install.


Jika Anda menggunakan Python versi lama, tidak dapat memutakhirkan, dan tidak memasang pip, Anda dapat menemukan informasi lebih lanjut tentang pemasangan pip di tautan berikut:

pip, dengan sendirinya, tidak membutuhkan tutorial. 90% dari waktu, satu-satunya perintah yang benar-benar Anda butuhkan adalah pip install <PACKAGE-NAME>. Karena itu, jika Anda tertarik untuk mempelajari lebih lanjut tentang detail tentang apa yang sebenarnya dapat Anda lakukan dengan pip, lihat:

Anda juga biasanya disarankan untuk menggunakan pip dan virtualenv secara bersamaan. Jika Anda seorang pemula di Python, saya pribadi berpikir akan baik-baik saja untuk memulai dengan hanya menggunakan pip dan menginstal paket secara global, tetapi pada akhirnya saya pikir Anda harus beralih ke penggunaan virtualenv saat Anda menangani proyek yang lebih serius.

Jika Anda ingin mempelajari lebih lanjut tentang menggunakan pip dan virtualenv secara bersamaan, lihat:

Michael0x2a
sumber
1
Apakah pip install secara internal memanggil file setup.py?
variabel
@variable, pip install from "wheels", paket pra-kompilasi, tidak, pip install dari sumber tidak: lihat antarmuka sistem pip install build
denis
Dalam pengalaman saya python setup.py installjuga mengunduh dan menginstal dependensi. Apakah ini perubahan sejak Anda menulis jawaban ini pada tahun 2013?
Ken Williams
19

python setup.py installadalah analog dari make install: ini adalah cara terbatas untuk mengkompilasi dan menyalin file ke direktori tujuan. Ini tidak berarti bahwa ini adalah cara terbaik untuk benar-benar menginstal perangkat lunak di sistem Anda.

pipadalah manajer paket, yang dapat menginstal, mengupgrade, mendaftar dan menghapus paket, seperti manajer paket yang sudah dikenal termasuk: dpkg, apt, yum, urpmi, portsdll. Di bawah tenda, ini akan berjalan python setup.py install, tetapi dengan opsi khusus untuk mengontrol bagaimana dan di mana hal-hal akan diinstal.

Singkatnya: gunakan pip.

Éric Araujo
sumber
2

Pertanyaannya adalah tentang metode yang disukai untuk menginstal tarball lokal yang berisi paket python, BUKAN tentang keuntungan mengunggah paket ke layanan pengindeksan seperti PyPi.

Agar saya tidak tahu beberapa distributor perangkat lunak tidak mengunggah paket mereka ke PyPi, malah meminta pengembang untuk mengunduh paket dari situs web mereka dan menginstal.

python setup.py install

Ini dapat berfungsi tetapi tidak disarankan. Tidak perlu membuka file tarball dan masuk ke dalamnya untuk menjalankan file setup.py.

pip install ../path/to/packagename.tar.gz

Ini adalah cara yang dirancang dan disukai. Ringkas dan sejajar dengan paket gaya PyPi.

Informasi lebih lanjut tentang pip installdapat ditemukan di sini: https://pip.readthedocs.io/en/stable/reference/pip_install/

themefield
sumber
Bisakah kita menggunakan pip install -e?
variabel