ทำไม # egg = foo เมื่อติดตั้ง pip จาก git repo


95

เมื่อฉันทำการ "pip install -e ... " เพื่อติดตั้งจาก git repo ฉันต้องระบุ # egg = somename หรือ pip บ่น ตัวอย่างเช่น:

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

สตริง "ไข่" นี้มีความสำคัญอย่างไร


1
pip installเอกสารส่วนนี้พูดถึง#egg=nameแต่ไม่ได้ให้คำตอบที่ชัดเจน
Christian Long

คำตอบ:


35

ต่อ pip install -h สตริง "egg" คือไดเร็กทอรีที่เช็คเอาต์เป็นส่วนหนึ่งของการติดตั้ง


12
นี่เป็นชื่อเดียวกับที่เก็บได้หรือไม่? กรณีมีความสำคัญหรือไม่?
CMCDragonkai

14
"ไดเร็กทอรีที่เช็คเอาต์"? ฉันจะใส่ชื่อสาขาหรือไม่? ทำอะไรขึ้นมา?
คริส

2
หากคุณสร้างแพ็คเกจ Python แบบกำหนดเองเมื่อคุณเรียกใช้ setuptools project-name.egg-info/top_level.txtควรสร้างไดเร็กทอรีที่มีชื่อว่า ใช้เนื้อหาของไฟล์นี้เป็นค่าสำหรับeggพารามิเตอร์
dspacejs

2
ดูเหมือนฉันจะคิดไม่ออกว่าการegg=...ตั้งค่านั้นสำคัญจริงหรือไม่ แพ็คเกจที่ฉันกำลังติดตั้งมีหลายรายการในไฟล์ top_level.txt ฉันได้ทดลองจับคู่กับnamekwarg ที่สคริปต์ใช้setup.pyแต่ยังเป็นค่าที่กำหนดเอง ผลลัพธ์ดูเหมือนจะเหมือนกันทั้งสองวิธี โปรดทราบว่าฉันติดตั้งโดยใช้ไวยากรณ์ซึ่งไม่จำเป็นต้องpip install https://... -e
Taylor Edmiston

7

คุณต้องใส่ # egg = Package เพื่อให้ pip รู้ว่าจะเกิดอะไรขึ้นใน URL นั้น ดูhttps://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

เพิ่มเติมเกี่ยวกับไข่


20
นั่นหมายความว่าอย่างไร "ดังนั้น pip จึงรู้ว่าจะเกิดอะไรขึ้นที่ url นั้น" มีสิ่งอื่นนอกเหนือจาก #egg ที่สามารถต่อท้าย url แบบนั้นได้หรือไม่?
Lorin Hochstein

ที่จริงผมชอบคำตอบที่จะจากpip install -h, Source will be checked out into src/PACKAGE (lower-case) and installed in-place (using setup.py develop)ผมไม่แน่ใจว่ามันคือการใช้ที่อื่น ...
Skylar Saveland

มันเป็นโคลน แต่ไม่ได้ติดตั้ง :(
Holms

6

https://pip.pypa.io/en/stable/reference/pip_install/#vcs-supportพูดว่า:

องค์ประกอบ "ชื่อโปรเจ็กต์" ของส่วนต่อท้าย URL "egg = -" ถูกใช้โดย pip ในตรรกะการอ้างอิงเพื่อระบุโปรเจ็กต์ก่อนที่จะดาวน์โหลด pip และวิเคราะห์ข้อมูลเมตา ส่วนประกอบ "เวอร์ชัน" ที่เป็นทางเลือกของชื่อไข่ไม่สำคัญในการทำงาน เป็นเพียงเบาะแสที่มนุษย์สามารถอ่านได้ว่าเวอร์ชันใดใช้งานอยู่ สำหรับโปรเจ็กต์ที่ setup.py ไม่อยู่ในรูทของโปรเจ็กต์จะใช้คอมโพเนนต์ "ไดเร็กทอรีย่อย" ค่าของคอมโพเนนต์ "ไดเร็กทอรีย่อย" ควรเป็นพา ธ เริ่มต้นจากรูทของโปรเจ็กต์ไปยังตำแหน่งที่ setup.py ตั้งอยู่

จากสิ่งนี้ฉันอนุมานได้ว่าค่าไข่นั้นใช้สำหรับการตรวจสอบการพึ่งพาเท่านั้นดังนั้นฉันคิดว่าตามแบบแผนsome-pypi-package-nameควรใช้ชื่อแพ็คเกจ (เช่น) ไม่ใช่โฟลเดอร์ที่มีอยู่ (เช่นsome_pypi_package_name)


6

ไข่เป็นเพียงบางรหัสหลามรวม ใน git url ไข่คือชื่อโครงการ การสนับสนุน VCS

โดยปกติเราติดตั้งแพคเกจ python จาก Pypi ดังนั้นคุณจึงระบุเฉพาะชื่อแพ็กเกจและเวอร์ชัน (หรือถือว่าเป็นเวอร์ชันล่าสุดหากคุณไม่ได้ระบุ) จากนั้น Pypi จะค้นหาไข่ที่คุณต้องการและ pip ​​จะทำการติดตั้ง pip install celeryจะติดตั้งไข่ที่เผยแพร่ล่าสุดและpip install celery[redis]จะติดตั้งไข่ใบอื่นที่มีแพ็คเกจคื่นฉ่ายเหมือนกันและติดตั้งไข่ล่าสุดจากแพ็คเกจใด ๆ ก็ตามที่ระบุว่าอ้างอิงสำหรับ redis ใน setup.py ของขึ้นฉ่าย

ด้วยคอมไพล์และ gitlab /{user|group}/{repository}.git@{tag}#egg={package-name}เส้นทางที่คุณระบุ มีความแตกต่างระหว่าง#egg=celeryและ#egg=celery[redis]แต่ทั้งสองจะมาจากซอร์สโค้ดเดียวกัน

"แท็ก" ยังสามารถเป็นสาขาหรือคอมมิตแฮชนอกเหนือจากแท็กจริง จะถือว่าเป็นmasterถ้าคุณไม่ระบุ

ตัวอย่างเช่นgit+https://github.com/celery/celery.git#egg=celery==4.3.0จะตรวจสอบสาขาหลักและติดตั้งนั้น แม้ว่าคุณจะระบุหมายเลขเวอร์ชัน แต่ก็ไม่ได้นำมาพิจารณาในการติดตั้ง หมายเลขเวอร์ชันถูกละเลย

เมื่อติดตั้งผ่าน git หรือ URL VCS อื่น ๆ คุณจะต้องค้นหาแท็กหรือแฮชของเวอร์ชันที่คุณต้องการ ตัวอย่างเช่นgit+https://github.com/celery/celery.git@v4.3.0#egg=celeryซึ่งจะตรวจสอบการกระทำที่ติดแท็ก "v4.3.0" จากนั้นติดตั้งแพ็กเกจจากซอร์สโค้ดนั้น สมมติว่าผู้ดูแลไม่ได้ติดแท็กที่เก็บของตนผิดอย่างร้ายแรงคุณจะได้รับเวอร์ชันที่คุณต้องการเช่นนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.