การลบโมดูล python ที่ติดตั้งในโหมดพัฒนา


93

สวัสดีฉันกำลังทดลองใช้บรรจุภัณฑ์ python โดยใช้ setuptools และเพื่อทดสอบว่าฉันติดตั้งโมดูลในโหมดพัฒนา กล่าวคือ

python setup.py develop

สิ่งนี้ได้เพิ่มไดเร็กทอรีโมดูลของฉันไปยัง sys.path ตอนนี้ฉันต้องการลบโมดูลมีวิธีใดบ้างที่จะทำสิ่งนี้?

ขอบคุณล่วงหน้า


4
เริ่มต้นใช้งานpipหรือตัวจัดการอื่น ๆ ที่มีความสามารถในการถอนการติดตั้งสำหรับจัดการแพ็คเกจ python
Tomasz Wysocki

1
@Tomasz คุณจะเทียบเท่าpython setup.py developกับได้pipอย่างไร?
akaihola

7
pip ติดตั้ง -e.
Tomasz Wysocki

11
"pip" ไม่ใช่คำตอบที่ถูกต้องสำหรับคำถามนี้ การติดตั้งโปรเจ็กต์ที่คุณกำลังพัฒนาโดยใช้ 'pip' เพื่อเรียกใช้หรือใช้งานหมายความว่าคุณจะต้องติดตั้งใหม่ทุกครั้งที่คุณแก้ไขซอร์สโค้ด วิธีที่ถูกต้องคือการใช้ 'setup.py develop' ตามคำถามเดิม
Jonathan Hartley

6
@JonathanHartley นั่นเป็นเพียงเท็จธรรมดา; pip มี--editable(หรือ-e) อาร์กิวเมนต์ที่จะทำงานประมาณเท่าที่จะ setuptools' developฉันคิดว่าอาจจะ--editableใหม่กว่าความคิดเห็นของคุณ แต่ไม่ - การค้นหา pip repo อย่างรวดเร็วใน GitHub ทำให้มีการอ้างอิงถึงรายการที่แก้ไขได้ในปี 2009 ยิ่งไปกว่านั้นฉันเห็นว่า Tomasz Wysocki ชี้ให้เห็นแล้วก่อนที่คุณจะแสดงความคิดเห็น !
Mark Amery

คำตอบ:


225

ใช้ตัวเลือก--uninstallหรือ-uเพื่อdevelopกล่าวคือ:

python setup.py develop --uninstall

การดำเนินการนี้จะลบออกจาก easy-install.pth และลบ. egg-link สิ่งเดียวที่ไม่ทำคือลบสคริปต์ (ยัง)


3
โปรดทราบว่าหากเวอร์ชันการพัฒนาของคุณติดตั้งไฟล์ปฏิบัติการบางอย่างและคุณเปลี่ยนแปลงในไฟล์ปฏิบัติการsetup.pyคุณควรลบออกด้วยตนเอง
norok2

1
ฉันเรียกใช้ตามที่อธิบายไว้ไม่มีข้อผิดพลาดในผลลัพธ์ แต่ฉันยังสามารถนำเข้าแพ็คเกจการพัฒนาของฉันได้ทั่วโลกดูเหมือนว่าจะยังไม่ถูกลบออก แก้ไข: ฉันรู้ว่าทำไมฉันต้องเรียกใช้ด้วย--userตัวเลือกเหมือนที่ฉันทำในระหว่างการติดตั้ง:python setup.py develop --uninstall --user
Marek

ฉันไม่คิดว่าสิ่งนี้จะปลอดภัยเพราะสิ่งต่าง ๆ สามารถเปลี่ยนแปลงได้ในการพัฒนา (เช่น) การเปลี่ยนชื่อโมดูล คุณต้องลบทุกอย่างด้วยตนเอง
mathtick

@ norok2 คำสั่งแบบแมนนวลที่ต้องรันเพื่อลบไฟล์ปฏิบัติการเหล่านั้นคืออะไร เท่าที่ฉันรู้ข้างต้นใช้ได้กับ python / pip บางเวอร์ชันแม้ว่าฉันจะไม่แน่ใจว่าอันไหน
Charlie Parker

1
@CharlieParker rmหรือdelขึ้นอยู่กับระบบปฏิบัติการของคุณ สิ่งที่ผมหมายถึงคือว่าถ้าคุณมี executables บางส่วนในเวลาที่คุณติดตั้งและเปลี่ยนชื่อของพวกเขา (หรือลบพวกเขา) ในของคุณsetup.pyแล้วsetup.pyจะไม่ทราบเกี่ยวกับพวกเขาได้อีกต่อไป (ไม่สำคัญว่าคุณpip/ pythonรุ่นและคุณจำเป็นต้องดูแลพวกเขา ด้วยตนเองโดยปกติจะอยู่ในbinไดเรกทอรีบางรายการบนระบบ POSIX (อ่าน Linuxes, BSDs, MacOS X) จำเกี่ยวกับ Win ไม่ได้
norok2

16

แก้ไข easy-install.pth ในไดเร็กทอรี site-package ของคุณและลบบรรทัดที่ชี้ไปยังเวอร์ชันการพัฒนาของแพ็คเกจนั้น


ใช่ฉันไม่ตรงนี้และหนึ่งไฟล์มากขึ้นโดยมีชื่อแพคเกจไข่เชื่อมโยงหรือสิ่งที่ฉันออกและตอนนี้การอ้างอิงไปยังโมดูลจะถูกลบออกขอบคุณ :)
copyninja

10
"setup.py development --uninstall" ให้คุณดูคำตอบของ @ pjeby
Jonathan Hartley

3
สิ่งนี้ใช้ได้ผลสำหรับฉันเมื่อdevelop --uninstallล้มเหลวเพราะฉันแยกโครงการออกเป็นสองโครงการและโครงการที่ผิดยังคงอยู่ในไดเรกทอรีเดิม
Wesley Baugh

1

ฉันเคยมีปัญหาคล้ายกันนี้มาก่อน สิ่งที่ฉันทำคือฉันโหลด Python shell นำเข้าโมดูลจากนั้นพิมพ์__file__แอตทริบิวต์ จากนั้นฉันจะลบโฟลเดอร์หรือไฟล์ที่เชื่อมโยง

สิ่งที่คุณอาจต้องการตรวจสอบคือการใช้Virtualenvระบบนี้ช่วยให้คุณสร้างอินสแตนซ์ของ python แยกจากระบบของคุณ โมดูลใด ๆ ที่คุณติดตั้งหรือใช้ในอินสแตนซ์นี้มีอยู่ในตัวรวมถึงเวอร์ชันของโมดูล

ตอนนี้ฉันเก็บโปรเจ็กต์ทั้งหมดของฉันไว้ข้างในของตัวเองที่มี Virtualenv ซึ่งช่วยให้ฉันสามารถติดตั้งและใช้โมดูลอะไรก็ได้ที่ฉันต้องการโดยไม่ต้องกังวลว่าจะทำให้โมดูลจากโปรเจ็กต์อื่นเสียหาย


จากครั้งต่อไปที่ฉันเล่นกับแพ็คเกจฉันจะใช้สิ่งนี้ดังนั้นฉันจะไม่ทำให้ระบบของฉันเสียหาย ขอขอบคุณข้อมูล
copyninja
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.