Python setup.py พัฒนากับการติดตั้ง


336

สองตัวเลือกใน setup.py developและinstallทำให้ฉันสับสน ตามเว็บไซต์นี้การใช้developสร้างลิงก์พิเศษไปยังไดเรกทอรีแพ็คเกจเว็บไซต์

มีคนแนะนำว่าฉันใช้python setup.py installสำหรับการติดตั้งใหม่และpython setup.py developหลังจากทำการเปลี่ยนแปลงใด ๆ กับไฟล์ติดตั้ง

มีใครบ้างไหมที่ได้เห็นการใช้คำสั่งเหล่านี้

คำตอบ:


468

python setup.py install ใช้ในการติดตั้งแพ็คเกจ (โดยทั่วไปคือบุคคลที่สาม) ที่คุณจะไม่พัฒนา / แก้ไข / ตรวจแก้จุดบกพร่องด้วยตัวเอง

สำหรับสิ่งของของคุณเองคุณต้องการติดตั้งแพ็กเกจของคุณก่อนแล้วจึงสามารถแก้ไขรหัสได้บ่อยครั้งโดยไม่ต้องติดตั้งแพ็กเกจใหม่ทุกครั้ง - และนั่นคือสิ่งที่python setup.py developทำ: ติดตั้งแพ็คเกจ (โดยทั่วไปเป็นโฟลเดอร์ซอร์ส) ในลักษณะที่ช่วยให้คุณสามารถแก้ไขรหัสของคุณได้อย่างสะดวกสบายหลังจากติดตั้งในสภาพแวดล้อม (เสมือน) และให้การเปลี่ยนแปลงมีผลทันที

ทราบว่าจะขอแนะนำให้ใช้pip install .(ติดตั้ง) และpip install -e .(นักพัฒนาติดตั้ง) เพื่อติดตั้งแพคเกจตามที่กล่าวอ้างsetup.pyโดยตรงจะทำสิ่งที่ไม่ถูกต้องสำหรับการอ้างอิงจำนวนมากเช่น prereleases pipดึงและรุ่นแพคเกจเข้ากันไม่ได้หรือทำแพคเกจยากที่จะถอนการติดตั้งด้วย


81
Erik ถูกต้อง สิ่งที่มีประโยชน์ที่ควรทราบคือsetup.py developมี--uninstallตัวเลือกสำหรับเมื่อคุณแฮ็คข้อมูลเรียบร้อยแล้ว
philadams

5
คิดว่าครั้งสุดท้ายที่นี่คืออีกทางเลือกหนึ่งที่จะsetup.py developเมื่อแฮ็คในแพคเกจหลามคือการใช้ "ง่าย ( แต่อย่างชัดเจน) การปรับเปลี่ยนเส้นทางเพื่อแก้ไขแพคเกจได้อย่างถูกต้องอีกครั้ง" เคนเน็ ธ Reitz
philadams

4
ฉันพบปัญหาในการpython setup.py developพยายามตั้งค่า Ceilometer เพื่อการพัฒนาท้องถิ่น ฉันสิ้นสุดการใช้pip install -e PATH(ภายใน virtualenv) เพื่อที่จะหลีกเลี่ยงปัญหาที่ถูกตัดขึ้นผ่าน easy_install
Joe D'Andrea

1
ไม่แน่ใจว่าเรื่องนี้เกิดขึ้นหรือไม่ แต่ถ้าฉันใช้ python 3 ฯลฯ จะต้องทำงานpython setup.py developแตกต่างกันหรือไม่
Charlie Parker

1
ใช้งานได้กับ python3 แต่อย่าลืมลบการติดตั้ง pip ใด ๆ ที่คุณอาจมีเพราะมันจะปะทะกัน (มันเกิดขึ้นกับฉันในขณะนี้)
Léo Germond

124

จากเอกสาร developจะไม่ติดตั้งแพคเกจ แต่มันจะสร้าง.egg-linkในด้านหลังไดเรกทอรีการใช้งานให้กับโครงการไดเรกทอรีรหัสที่มา

ดังนั้นมันจึงเหมือนกับการติดตั้ง แต่แทนที่จะเป็นการคัดลอกไปยังsite-packagesเพิ่มลิงค์สัญลักษณ์ ( .egg-linkทำหน้าที่เป็นลิงค์สัญลักษณ์หลายแพลตฟอร์ม)

ด้วยวิธีนี้คุณสามารถแก้ไขซอร์สโค้ดและดูการเปลี่ยนแปลงโดยตรงโดยไม่ต้องติดตั้งใหม่ทุกครั้งที่คุณทำการเปลี่ยนแปลงเล็กน้อย developนี้จะเป็นประโยชน์เมื่อคุณเป็นนักพัฒนาของโครงการว่าเพราะฉะนั้นชื่อ หากคุณเพียงแค่ติดตั้งแพ็คเกจของคนอื่นคุณควรใช้install


24

สิ่งที่ผู้คนอาจพบว่ามีประโยชน์เมื่อใช้developวิธีนี้คือ--userตัวเลือกในการติดตั้งโดยไม่ต้องใช้ sudo Ex:

python setup.py develop --user

แทน

sudo python setup.py develop

11
IIUC คุณไม่ควรsetup.py developอยู่ในระบบของคุณสิ่งนี้เหมาะสมสำหรับ virtualenv เท่านั้น
dividebyzero

2
@dividebyzero คุณหมายถึงอย่างใดอย่างหนึ่งควรใช้เสมอpython setup.py develop --userถ้าฉันเข้าใจถูกต้องหรือไม่ นอกจากนี้คุณช่วยบอกฉันได้ไหมว่าแพคเกจติดตั้งโดยใช้python setup.py develop --user? ขอบคุณ!
หุ่นยนต์ AI

2
ฉันคิดว่า--userจะติดตั้งในไดเรกทอรีในบัญชีบ้านของคุณและจะไม่ส่งผลกระทบต่อผู้ใช้รายอื่นในระบบของคุณ developจะทำให้การเชื่อมโยงไปยังไดเรกทอรีแหล่งที่มาโครงการของคุณแทนการคัดลอกจริงทุกอย่าง develop --userควรจะตกลงและdevelopใน virtualenv ด้วย เฉพาะdevelopกับระบบจริงเท่านั้นที่แปลกเพราะคุณอาจมีผู้ใช้รายอื่นที่ใช้บางสิ่งที่ชี้ไปที่โครงการในสำเนาซอร์สโค้ดโครงการส่วนบุคคลของคุณ
dividebyzero

4
ผู้คนจำนวนมาก (ส่วนใหญ่?) ไม่ได้ทำงานบนระบบที่มีผู้ใช้หลายคน
patstew

1
@boatcoder, Mac และ Linux (และ Windows) อาจจะมีผู้ใช้หลายคนที่มีความสามารถระบบ แต่ส่วนใหญ่มีแนวโน้มที่นักพัฒนาที่เป็นเพียง (จริง) บัญชีผู้ใช้ของเดสก์ทอปของเขาและผมเชื่อว่าสิ่งที่ pastew หมาย
MestreLion
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.