easy_install / pip atau apt-get

30

Seperti yang disebutkan di halaman wiki Ubuntu di Rails , direkomendasikan permata yang mengelola dependensi Rails / Ruby Anda.

Apa praktik terbaik dengan paket Python seperti Django? Haruskah saya menginstalnya melalui apt-get atau haruskah saya membiarkan easy_install / pip mengambilnya dari PyPi?

Leonard Ehrenfried
sumber

Jawaban:

29

Ada beberapa argumen:

  1. Gunakan Repositori / PPA karena mereka akan membuat Anda tetap stabil dan terkini dengan perbaikan keamanan.

    Ini sebagian besar benar. Jika, misalnya, Anda menginstal python-djangoseperti yang saya miliki, Anda mendapatkan pembaruan keamanan. Ini bagus karena Anda hanya harus tetap di atas apt tetapi Anda masih harus menguji hal-hal sebelum Anda mendorong pembaruan (meskipun pengujian harus baik-baik saja setiap kali).

    Anda bisa membantah bahwa jika Anda menggunakan pip, Anda mungkin tidak pernah memeriksa pembaruan.

  2. Gunakan pipsehingga Anda dapat menggunakan versi "stabil" yang tepat.

    Tidak ada keraguan tentang itu: Repo tertinggal dari dunia nyata. Django adalah 2.0 tetapi repo untuk versi LTS Ubuntu (yang banyak orang pertahankan untuk server) Anda hanya mendapatkan 1,8 pada Ubuntu 16,4 lts dengan Python 2 tetapi masih mendapatkan pembaruan keamanan di dalamnya.

    pipmemberi Anda yang terbaru setiap saat. Anda hanya perlu memperbaruinya sendiri.

  3. Memutakhirkan pemasangan Python yang digunakan repo bisa menjadi mimpi buruk

    Ketika Anda memutakhirkan Ubuntu ke versi berikutnya, itu meningkatkan banyak paket. Banyak hal berubah. Saya tahu di Django ini berarti Anda harus berhati-hati terhadap kode-tidak kompatibel, penghentian ... Tapi hal yang sama berlaku untuk semua kode Python lainnya.

    Hal yang sama berlaku untuk piptetapi dengan pipAnda bisa melakukan satu per satu. Anda tahu apa yang menyebabkan masalah sehingga Anda tahu di mana mencarinya untuk menemukan perbaikannya.

  4. pip+ virtualenvmemungkinkan Anda memisahkan berbagai hal

    virtualenvmemungkinkan Anda memiliki lingkungan Python kecil yang portabel. Ini memungkinkan Anda untuk memiliki beberapa lingkungan Python berbeda yang berjalan berdampingan di mesin yang sama.

    Hikmah yang jelas tampaknya untuk pemeliharaan karena Anda dapat mengelola lingkungan dengan cara yang sama seperti Anda mengelola kode. Bahkan menyimpan lingkungan di VCS juga ... tetapi Anda harus ingat bahwa memiliki dua belas yang berbeda virtualenvberarti dua belas lingkungan yang perlu Anda periksa dan perbarui.


Sunting: Setelah serangkaian peningkatan mengerikan pada server untuk mendapatkannya dari Lucid ke Precise, saya telah beralih dari perpaduan Apt + pip (nr 1 dan 2) ke situasi pip + virtualenv (nr. 4) murni. Alih-alih memiliki satu virtualenv per situs, saya punya satu yang dibagikan antara selusin situs atau lebih. Ini berfungsi untuk saat ini.

Saya juga harus menulis skrip kecil yang memeriksa status paket yang diinstal dengan pip. Jika ada pembaruan saya harus menerapkannya secara manual (yang bagus karena saya mengujinya secara lokal, dalam virtualenv lokal). Ini semua masih sedikit lebih menyakitkan daripada yang awalnya tetapi jauh lebih baik dalam jangka panjang.

Oli
sumber
10
  • Paket dari repositori

    Ini harus diinstal setiap kali aplikasi Anda dengan cara tertentu khusus untuk Ubuntu . Mereka menjamin Anda versi stabil yang dapat Anda instal di seluruh mesin Ubuntu, mereka didukung dan kadang-kadang lebih dewasa daripada yang Anda dapatkan melalui pip. Jika Anda menggunakan sekelompok server ubuntu, atau jika Anda sedang menulis aplikasi Ubuntu, gunakan ini, jika tersedia .

    Mereka juga terkadang berisi modifikasi spesifik Ubuntu.

  • pip vs easy_install

    Tidak banyak yang bisa dikatakan tentang itu, seperti yang dikatakan peretas Django James Bennett:

    Tolong, untuk cinta Guido, berhentilah menggunakan setuptools dan easy_install, dan gunakan distutils dan pip saja.

    Untuk diskusi mendalam tentang perbedaan, lihat kemasan On oleh James Bennett (dari Django) dan Beberapa Koreksi Untuk "On Packaging" oleh Ian Bicking (dari mozilla).

Jika Anda ingin aman, coba gunakan pip Anda menggunakan virtualenv . Ini memberi Anda lingkungan python yang terisolasi, sehingga Anda dapat yakin bahwa aplikasi Anda akan berjalan pada mesin apa pun.

Tunggu sebentar, saya percaya beberapa orang akan tidak setuju dengan saya.

Stefano Palazzo
sumber