"Pip install --editable ./" vs "python setup.py develop"

178

Apakah ada perbedaan yang signifikan antara

pip install -e /path/to/mypackage

dan varian setuptools?

python /path/to/mypackage/setup.py develop
PeterE
sumber
1
Tampaknya ini merupakan tautan yang diperbarui yang menggambarkan mode pengembangan: setuptools.readthedocs.io/en/latest/…
PaulR
jika Anda tertarik untuk menghapus instalasi (paket dalam pengembangan / mode yang dapat diedit) coba pertanyaan ini: stackoverflow.com/questions/17346619/…
Charlie Parker

Jawaban:

131

Cobalah untuk menghindari panggilan setup.py langsung, itu tidak akan memberi tahu pip bahwa Anda telah menginstal paket Anda.

Dengan pip install -e:

Untuk proyek lokal, direktori "SomeProject.egg-info" dibuat relatif terhadap jalur proyek. Ini adalah satu keuntungan daripada hanya menggunakan setup.py develop, yang menciptakan "info telur" secara langsung relatif terhadap direktori kerja saat ini.

Lebih lanjut: docs

Baca juga dokumen setuptools .

sobolevn
sumber
Apakah pengguna harus menjalankan 'python setup.py sdist' lagi setelah membuat perubahan file agar perubahan berlaku?
variabel
namun jika Anda perlu melakukan debug (file setup.py itu sendiri) dengan 'set_trace' maka 'python setup.py develop' memungkinkan
mirek
URL kedua rusak.
bad_coder
Keduanya bekerja untuk saya.
sobolevn
76

Satu lagi perbedaan: pip install -emenggunakan roda sementara python setup.py develop
tidak menggunakannya.

Dengan install, Anda dapat mencapai perilaku yang sama dengan menggunakan
pip install -e /path/to/package --no-use-wheel

Info lebih lanjut tentang roda: roda python

pengguna2488286
sumber
18
Perhatikan bahwa, menurut pip.pypa.io/en/stable/reference/pip_install , DIHAPUS--no-use-wheel mendukung--no-binary :all:
Nzbuu
Bisakah kita melakukan pip install -e untuk paket yang diproduksi menggunakan sdist?
variabel
36

Perbedaan lain yang dapat mendukung pip install -eadalah bahwa jika proyek Anda memiliki dependensi di install_requiresdalam setup.py, kemudian pip install -e .menginstal dependensi dengan pip, sedangkan python setup.py developdapat menginstal dengan easy_install, dan dapat menyebabkan masalah re: 'telur-info' seperti yang disebutkan di atas. Ketika install-requiresdigunakan dependency_linksdengan URL git khusus, dengan pengidentifikasi telur terlampir, ini bisa sangat menjengkelkan.

Ely
sumber
1
ini benar-benar menjelaskan mengapa paket pribadi saya gagal diinstal. ada di server devpi saya bukan pypi. Terima kasih.
ckot
Ketika Anda mengatakan paket menjadi dapat diedit, Apakah maksud Anda pengguna harus menjalankan 'python setup.py sdist' lagi setelah membuat perubahan ke file paket? Atau menjalankan perintah di atas tidak diperlukan?
variabel
@variable ketika Anda menginstal paket lokal pip install -e ., itu pada dasarnya membuat symlink di direktori paket situs Python yang relevan untuk menunjuk ke copy pekerjaan Anda. Karena perubahan kode dilakukan pada copy yang berfungsi, itu langsung tercermin dalam versi "diinstal", jadi Anda tidak perlu menjalankan kembali perintah instalasi saat Anda pergi. Ini terutama berguna untuk pengembangan dalam repositori yang mewakili paket yang dapat diinstal, tetapi juga dapat berguna untuk misalnya menulis beberapa kumpulan modul dengan hanya impor absolut, dll.
ely
0

Namun perbedaan lain: ketika Anda menjalankan python setup.py developuntuk versi yang dianggap sebagai pra-rilis (mungkin karena Anda menjalankannya dari klon git ketika tidak memeriksa rilis), maka Anda akan memungkinkan instalasi pra-rilis dependensi Anda . Di sisi lain, dengan pip install --editableAnda harus lulus --presecara eksplisit jika Anda ingin pra-rilis ini.

(Lihat log CI dengan pra-rilis yang tidak sengaja digunakan dan bandingkan dengan bangunan tetap di sini .)

Jan Kundrát
sumber