เมื่อฉันทำการ "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 ฉันได้ทดลองจับคู่กับname
kwarg ที่สคริปต์ใช้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
แต่ไม่ได้ให้คำตอบที่ชัดเจน