มีความแตกต่างอย่างมีนัยสำคัญระหว่าง
pip install -e /path/to/mypackage
และตัวแปร setuptools?
python /path/to/mypackage/setup.py develop
มีความแตกต่างอย่างมีนัยสำคัญระหว่าง
pip install -e /path/to/mypackage
และตัวแปร setuptools?
python /path/to/mypackage/setup.py develop
คำตอบ:
พยายามหลีกเลี่ยงการโทรsetup.pyโดยตรงจะไม่สามารถบอกได้ว่าคุณได้ติดตั้งแพ็คเกจของคุณอย่างถูกต้อง
ด้วยpip install -e:
สำหรับโครงการในท้องถิ่นไดเรกทอรี“ SomeProject.egg-info” จะถูกสร้างขึ้นโดยสัมพันธ์กับเส้นทางของโครงการ นี่เป็นข้อได้เปรียบอย่างหนึ่งของการใช้งานเพียงอย่างเดียว
setup.py developซึ่งจะสร้าง“ ไข่ข้อมูล” ที่เกี่ยวข้องโดยตรงกับไดเรกทอรีการทำงานปัจจุบัน
เพิ่มเติม: เอกสาร
อ่านเอกสารของ setuptools ด้วย
ข้อแตกต่างอีกประการหนึ่ง: pip install -eใช้ล้อขณะที่
python setup.py develop
ไม่ได้ใช้
ด้วยinstallคุณสามารถบรรลุพฤติกรรมเดียวกันโดยใช้
pip install -e /path/to/package --no-use-wheel
ข้อมูลเพิ่มเติมเกี่ยวกับล้อ: ล้อหลาม
--no-use-wheelงานแล้ว--no-binary :all:
ความแตกต่างที่อาจเข้าข้างอีกpip install -eคือว่าถ้าโครงการของคุณมีการอ้างอิงในinstall_requiresในsetup.pyแล้วpip install -e .ติดตั้งการอ้างอิงกับ pip ในขณะที่python setup.py developสามารถทำการติดตั้งeasy_installและอาจทำให้เกิดปัญหาอีกครั้ง: 'ไข่ข้อมูล' ดังกล่าวข้างต้น เมื่อinstall-requiresใช้dependency_linksกับ URL git ที่กำหนดเองพร้อมตัวระบุไข่ที่แนบมานี้อาจเป็นเรื่องที่น่ารำคาญเป็นพิเศษ
pip install -e .จะทำให้ symlink ในไดเรกทอรี Python site-packages ไดเรกทอรีที่เกี่ยวข้องชี้ไปที่สำเนาการทำงานของคุณ เมื่อมีการเปลี่ยนแปลงรหัสในสำเนาการทำงานนั้นจะมีผลทันทีในรุ่น "ติดตั้ง" ดังนั้นคุณไม่จำเป็นต้องเรียกใช้คำสั่งการติดตั้งใหม่ตามที่คุณไป นี้จะเป็นประโยชน์มากที่สุดสำหรับการพัฒนาในพื้นที่เก็บข้อมูลที่แสดงถึงแพคเกจติดตั้งได้ แต่ยังสามารถเป็นประโยชน์สำหรับการเขียนเช่นคอลเลกชันของโมดูลบางคนที่มีการนำเข้าที่แน่นอนเท่านั้น ฯลฯ
อีกข้อแตกต่าง: เมื่อคุณเรียกใช้python setup.py developรุ่นที่ถือว่าเป็นรุ่นก่อนวางจำหน่าย (อาจเป็นเพราะคุณเรียกใช้จากโคลน git เมื่อไม่ได้ตรวจสอบรุ่น) คุณจะเปิดใช้งานการติดตั้งรุ่นก่อนวางจำหน่ายของการอ้างอิงของคุณ . ในอีกทางหนึ่งด้วยpip install --editableคุณจะต้องผ่าน--preอย่างชัดเจนหากคุณต้องการเผยแพร่ล่วงหน้าเหล่านี้
(ดูบันทึก CI ที่มีการเผยแพร่ล่วงหน้าโดยไม่ได้ตั้งใจใช้และเปรียบเทียบกับการสร้างถาวรที่นี่ )