Mengapa # egg = foo saat memasang pip dari git repo

96

Ketika saya melakukan "pip install -e ..." untuk menginstal dari git repo, saya harus menentukan # egg = somename atau keluhan pip. Sebagai contoh:

pip install -e git://github.com/hiidef/oauth2app.git#egg=oauth2app

Apa pentingnya string "telur" ini?

Lorin Hochstein
sumber
1
Bagian pip installdokumentasi ini berbicara tentang #egg=name, tetapi tidak memberikan jawaban yang jelas.
Christian Long

Jawaban:

36

per pip install -h string "egg" adalah direktori yang diperiksa sebagai bagian dari instalasi

Will Ayd
sumber
12
Bisakah ini hanya nama yang sama dengan repositori? Apakah kasus itu penting?
CMCDragonkai
14
"Direktori yang diperiksa"? Jadi, apakah saya memasukkan nama cabang? Buat sesuatu?
Chris
2
Jika Anda telah membuat paket Python kustom, ketika Anda menjalankan setuptools, direktori bernama project-name.egg-info/top_level.txtseharusnya sudah dibuat. Gunakan konten file ini sebagai nilai eggparameter.
dspacejs
2
Saya tidak tahu apakah egg=...pengaturan itu benar-benar penting. Paket yang saya instal memiliki banyak entri di file top_level.txt. Saya telah bereksperimen dengan mencocokkannya dengan namekwarg yang digunakan skrip setup.pytetapi juga nilai sewenang-wenang. Hasilnya tampaknya sama. Perhatikan bahwa saya menginstal menggunakan pip install https://...sintaks yang tidak memerlukan -e.
Taylor Edmiston
8

Anda harus menyertakan # egg = Package sehingga pip tahu apa yang diharapkan di URL itu. Lihat https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

lebih lanjut tentang telur

Skylar Saveland
sumber
20
Apa artinya "jadi pip tahu apa yang diharapkan di url itu?" Apakah ada sesuatu selain #egg yang valid untuk ditambahkan ke url seperti itu?
Lorin Hochstein
Saya sebenarnya suka jawaban Will dari pip install -h, Source will be checked out into src/PACKAGE (lower-case) and installed in-place (using setup.py develop)saya tidak yakin itu digunakan di tempat lain ...
Skylar Saveland
Ini kloning tetapi tidak dipasang :(
holms
6

https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support mengatakan:

Komponen "nama proyek" dari akhiran url "egg = -" digunakan oleh pip dalam logika ketergantungannya untuk mengidentifikasi proyek sebelum pip mendownload dan menganalisis metadata. Komponen "versi" opsional dari nama telur tidak penting secara fungsional. Ini hanya memberikan petunjuk yang dapat dibaca manusia tentang versi apa yang digunakan. Untuk proyek di mana setup.py tidak berada di root proyek, komponen "subdirektori" digunakan. Nilai komponen "subdirektori" harus berupa jalur yang dimulai dari akar proyek ke tempat setup.py berada.

Dari sini saya menyimpulkan bahwa nilai telur hanya digunakan untuk pemeriksaan ketergantungan dan oleh karena itu saya pikir, menurut konvensi, nama paket (yaitu some-pypi-package-name) harus digunakan, bukan folder yang ada (yaitu some_pypi_package_name)

Mario
sumber
6

Telur hanyalah beberapa kode python yang dibundel . Di url git, telur adalah nama proyek. Dukungan VCS

Biasanya kami menginstal paket python dari Pypi, jadi Anda HANYA menentukan nama dan versi paket (atau menganggap versi terbaru jika Anda tidak menentukan). Pypi kemudian mencari telur mana yang Anda inginkan dan pip menginstalnya. pip install celeryakan menginstal telur terbaru yang diterbitkan dan pip install celery[redis]akan menginstal telur berbeda yang berisi paket seledri yang sama dan juga menginstal telur terbaru dari paket apa pun yang terdaftar sebagai dependensi untuk redis di setup.py celery.

Dengan jalur git dan gitlab, Anda dapat menentukannya /{user|group}/{repository}.git@{tag}#egg={package-name}. ada perbedaan antara #egg=celerydan #egg=celery[redis], tetapi keduanya berasal dari kode sumber yang sama.

"tag" juga bisa menjadi cabang atau melakukan hash selain tag sebenarnya. Diasumsikan masterjika Anda tidak menentukan.

misalnya, git+https://github.com/celery/celery.git#egg=celery==4.3.0akan memeriksa cabang master dan menginstalnya. Meskipun Anda menentukan nomor versi, itu tidak diperhitungkan dalam instalasi. NOMOR VERSI DIABAIKAN

Saat menginstal melalui git atau url VCS lainnya, Anda akan ingin menemukan tag atau hash dari versi yang Anda butuhkan. Misalnya, git+https://github.com/celery/[email protected]#egg=celeryyang akan memeriksa komit dengan tag "v4.3.0" dan kemudian menginstal paket dari kode sumber tersebut. Dengan asumsi pengelola tidak salah memberi tag pada repositori mereka, Anda bisa mendapatkan versi yang Anda inginkan seperti itu.

mehtunguh
sumber