เมื่อฉันทำการ "pip install -e ... " เพื่อติดตั้งจาก git repo ฉันต้องระบุ # egg = somename หรือ pip บ่น ตัวอย่างเช่น:
pip install -e git://github.com/hiidef/oauth2app.git#egg=oauth2app
สตริง "ไข่" นี้มีความสำคัญอย่างไร
เมื่อฉันทำการ "pip install -e ... " เพื่อติดตั้งจาก git repo ฉันต้องระบุ # egg = somename หรือ pip บ่น ตัวอย่างเช่น:
pip install -e git://github.com/hiidef/oauth2app.git#egg=oauth2app
สตริง "ไข่" นี้มีความสำคัญอย่างไร
คำตอบ:
ต่อ pip install -h สตริง "egg" คือไดเร็กทอรีที่เช็คเอาต์เป็นส่วนหนึ่งของการติดตั้ง
project-name.egg-info/top_level.txtควรสร้างไดเร็กทอรีที่มีชื่อว่า ใช้เนื้อหาของไฟล์นี้เป็นค่าสำหรับeggพารามิเตอร์
egg=...ตั้งค่านั้นสำคัญจริงหรือไม่ แพ็คเกจที่ฉันกำลังติดตั้งมีหลายรายการในไฟล์ top_level.txt ฉันได้ทดลองจับคู่กับnamekwarg ที่สคริปต์ใช้setup.pyแต่ยังเป็นค่าที่กำหนดเอง ผลลัพธ์ดูเหมือนจะเหมือนกันทั้งสองวิธี โปรดทราบว่าฉันติดตั้งโดยใช้ไวยากรณ์ซึ่งไม่จำเป็นต้องpip install https://... -e
คุณต้องใส่ # egg = Package เพื่อให้ pip รู้ว่าจะเกิดอะไรขึ้นใน URL นั้น ดูhttps://pip.pypa.io/en/stable/reference/pip_install/#vcs-support
pip install -h, Source will be checked out into src/PACKAGE (lower-case) and installed in-place (using setup.py develop)ผมไม่แน่ใจว่ามันคือการใช้ที่อื่น ...
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)
ไข่เป็นเพียงบางรหัสหลามรวม ใน 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" จากนั้นติดตั้งแพ็กเกจจากซอร์สโค้ดนั้น สมมติว่าผู้ดูแลไม่ได้ติดแท็กที่เก็บของตนผิดอย่างร้ายแรงคุณจะได้รับเวอร์ชันที่คุณต้องการเช่นนั้น
pip installเอกสารส่วนนี้พูดถึง#egg=nameแต่ไม่ได้ให้คำตอบที่ชัดเจน