มีความแตกต่างอย่างมีนัยสำคัญระหว่าง
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 ที่มีการเผยแพร่ล่วงหน้าโดยไม่ได้ตั้งใจใช้และเปรียบเทียบกับการสร้างถาวรที่นี่ )