คุณจะถอนการติดตั้งแพคเกจ python ที่ติดตั้งโดยใช้ distutils ได้อย่างไร?


92

คุณสามารถลบไดเร็กทอรีออกจากการติดตั้ง python หรือมีไฟล์ที่ค้างอยู่ที่คุณต้องลบหรือไม่

คำตอบ:


45

แตกต่างกันไปตามตัวเลือกที่คุณส่งผ่านไปinstallและเนื้อหาของไฟล์คอนฟิกูเรชัน distutilsบนระบบ / ในแพ็คเกจ ฉันไม่เชื่อว่ามีการแก้ไขไฟล์ใด ๆ นอกไดเรกทอรีที่ระบุด้วยวิธีเหล่านี้

โดยเฉพาะอย่างยิ่งdistutils ไม่มีคำสั่งถอนการติดตั้งในขณะนี้

นอกจากนี้ยังเป็นที่น่าสังเกตว่าการลบแพ็คเกจ / ไข่อาจทำให้เกิดปัญหาการพึ่งพา - สาธารณูปโภคเช่นeasy_installพยายามบรรเทาปัญหาดังกล่าว


4
โปรดอัปเดตสิ่งนี้เพื่อจัดการกับไฟล์ที่ค้างอยู่ในคำถามโดยตรงได้หรือไม่
ล็อต

ฉันคิดว่าฉันทำแล้ว - ไม่มีไฟล์ใดถูกสร้างขึ้นนอกไดเร็กทอรีที่ระบุโดยการกำหนดค่า distutils และแฟล็กการติดตั้งดังนั้นไฟล์ "ค้าง" ใด ๆ จะมีอยู่ในไดเร็กทอรีเหล่านี้ แตกต่างกันไปในแต่ละแพ็คเกจ
cdleary

2
@cdleary: ขอบคุณ แต่ฉันหวังว่าคุณจะชี้แจงและเสริมสร้างคำตอบของคุณโดยไม่ต้องเพิ่มหัวข้อความคิดเห็นยาว ๆ
ล็อต

2
@ S.Lott: ขออภัย แต่ฉันไม่รู้ว่าคุณต้องการคำตอบในส่วนไหน - คุณสามารถเจาะจงได้มากกว่านี้ไหม
cdleary

1
msg139773วันที่: 2011-07-04 14:35 distutils2 / packaging มีฟังก์ชันลบและคำสั่งลบ pysetup
Edward

19

สามสิ่งที่ติดตั้งที่คุณจะต้องลบคือ:

  1. แพ็คเกจ / โมดูล
  2. สคริปต์
  3. ไฟล์ข้อมูล

ตอนนี้ในระบบ linux ของฉันสิ่งเหล่านี้อาศัยอยู่ใน:

  1. /usr/lib/python2.5/site-packages
  2. / usr / bin
  3. / usr / share

แต่ในระบบ windows พวกเขามีแนวโน้มที่จะอยู่ในไดเรกทอรีการแจกจ่าย Python ทั้งหมด ฉันไม่รู้เกี่ยวกับ OSX ยกเว้นว่าชอบทำตามรูปแบบ linux มากกว่า


14

การแฮ็กตามการประทับเวลาอื่น:

  1. สร้างจุดยึด: touch /tmp/ts
  2. ติดตั้งแพคเกจที่จะลบอีกครั้ง: python setup.py install --prefix=<PREFIX>
  3. ลบไฟล์ที่ใหม่กว่าไฟล์ anchor: find <PREFIX> -cnewer /tmp/ts | xargs rm -r

1
-1. ฉันไม่ชอบ| xargs rm -r. ผมขอแนะนำให้ไปกว่าแต่ละไฟล์ด้วยตนเอง ใน ext4 (และระบบไฟล์อื่น ๆ ) findจะแสดงรายการโฟลเดอร์ทั้งหมดด้วย ถ้าคำนำหน้าของคุณ/usrคุณจะลบ /usr/*
Mateen Ulhaq

8

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

หากคุณต้องการให้ใช้งานได้อีกครั้งเพียงแค่ติดตั้งใหม่

อย่างไรก็ตามหากคุณใช้ distutils ให้พิจารณาใช้คุณสมบัติหลายเวอร์ชันด้วย ช่วยให้คุณสามารถติดตั้งแพ็คเกจเดียวได้หลายเวอร์ชัน นั่นหมายความว่าคุณไม่จำเป็นต้องลบแพ็คเกจเวอร์ชันเก่าหากคุณเพียงแค่ต้องการติดตั้งเวอร์ชันที่ใหม่กว่า


5

ใน ubuntu 12.04 ฉันพบว่าสถานที่เดียวที่คุณต้องดูตามค่าเริ่มต้นอยู่ภายใต้

/usr/local/lib/python2.7/

และเพียงแค่ลบโฟลเดอร์และไฟล์ที่เกี่ยวข้องหากมี!


บางครั้งใน / usr / lib / python <2.7 / 3.6>
Vineet

4

ถ้านี่เป็นสำหรับการทดสอบและ / หรือเพื่อการพัฒนา, setuptoolsมีการพัฒนาคำสั่งว่าการปรับปรุงทุกครั้งที่คุณทำการเปลี่ยนแปลง (เพื่อให้คุณไม่จำเป็นต้องถอนการติดตั้งและติดตั้งทุกครั้งที่คุณทำการเปลี่ยนแปลง) และคุณสามารถถอนการติดตั้งแพ็กเกจโดยใช้คำสั่งนี้ได้เช่นกัน

หากคุณใช้สิ่งนี้สิ่งที่คุณประกาศว่าเป็นสคริปต์จะถูกทิ้งไว้เบื้องหลังเป็นไฟล์ที่ค้างคา


4

install --record + xargs rm

sudo python setup.py install --record files.txt
xargs sudo rm -rf < files.txt

ลบไฟล์ทั้งหมดและทิ้งไดเร็กทอรีว่างไว้ข้างหลัง

นั่นไม่เหมาะควรเพียงพอที่จะหลีกเลี่ยงความขัดแย้งของแพ็คเกจ

จากนั้นคุณสามารถทำงานให้เสร็จสิ้นได้ด้วยตนเองหากคุณต้องการโดยการอ่านfiles.txtหรือกล้าหาญและลบไดเร็กทอรีว่างโดยอัตโนมัติเช่นกัน

ผู้ช่วยที่ปลอดภัยคือ:

python-setup-uninstall() (
  sudo rm -f files.txt
  sudo python setup.py install --record files.txt && \
  xargs rm -rf < files.txt
  sudo rm -f files.txt
)

ทดสอบใน Python 2.7.6, Ubuntu 14.04



2

ฉันเพิ่งถอนการติดตั้งแพคเกจ python และแม้ว่าฉันจะไม่แน่ใจว่าฉันทำได้อย่างสมบูรณ์แบบ แต่ฉันก็มั่นใจพอสมควร

ฉันเริ่มต้นด้วยการรับรายการไฟล์ที่เกี่ยวข้องกับ python ทั้งหมดเรียงลำดับตามวันที่โดยสมมติว่าไฟล์ทั้งหมดในแพ็กเกจของฉันจะมีการประทับเวลาเดียวกันไม่มากก็น้อยและจะไม่มีไฟล์อื่น ๆ

โชคดีที่ผมได้มีงูหลามติดตั้งภายใต้/opt/Python-2.6.1; ถ้าฉันใช้ Python ที่มาพร้อมกับ Linux distro ของฉันฉันจะต้องกัดเซาะทั้งหมด/usrซึ่งจะต้องใช้เวลานาน

จากนั้นฉันก็เพียงแค่การตรวจสอบรายการที่และตั้งข้อสังเกตด้วยความโล่งใจว่าทุกสิ่งที่ผมอยากจะ Nuke ประกอบด้วยไดเรกทอรีหนึ่งและหนึ่งแฟ้ม/opt/Python-2.6.1/lib/python2.6/site-packages/module-name//opt/Python-2.6.1/lib/python2.6/site-packages/module-x.x.x_blah-py2.6.egg-info

ดังนั้นฉันจึงลบสิ่งเหล่านั้นออกไป

นี่คือวิธีที่ฉันได้รับรายการไฟล์ที่เรียงลำดับวันที่:

find "$@" -printf '%T@ ' -ls | sort -n | cut -d\ -f 2-

(ฉันคิดว่านั่นต้องเป็น GNU "ค้นหา" รสชาติที่คุณได้รับใน OS X ไม่ทราบเกี่ยวกับ "-printf '% T @'")

ฉันใช้สิ่งนั้นตลอดเวลา


2

สำหรับ Windows 7

แผงควบคุม -> โปรแกรม -> ถอนการติดตั้ง

แล้ว

เลือกแพ็คเกจ python ที่จะลบ


@Mauricio ฉันไม่เห็นเวอร์ชันเก่าในรายการ แต่ฉันสามารถดูไฟล์ egg ในไซต์แพ็คเกจได้ เป็นปัญหาหรือไม่

1

ใน Mac OSX ให้ลบ 2 ไดเรกทอรีนี้ด้วยตนเองภายใต้pathToPython / site-Packages /จะทำงาน:

  • {packageName}
  • {packageName} - {version} -info

ตัวอย่างเช่นในการลบpyasn1ซึ่งเป็นโครงการที่ติดตั้ง distutils:

  • rm -rf lib / python2.7 / ไซต์แพ็คเกจ / pyasn1
  • rm -rf lib / python2.7 / site-Packages / pyasn1-0.1.9-py2.7.egg-info

หากต้องการทราบว่าไซต์แพ็คเกจของคุณอยู่ที่ไหน:

python -m site

1
ทำงานได้ตามที่คาดไว้
c1377554

-1

ERROR: flake8 3.7.9 has requirement pycodestyle<2.6.0,>=2.5.0, but you'll have pycodestyle 2.3.1 which is incompatible. ERROR: nuscenes-devkit 1.0.8 has requirement motmetrics<=1.1.3, but you'll have motmetrics 1.2.0 which is incompatible. Installing collected packages: descartes, future, torch, cachetools, torchvision, flake8-import-order, xmltodict, entrypoints, flake8, motmetrics, nuscenes-devkit Attempting uninstall: torch Found existing installation: torch 1.0.0 Uninstalling torch-1.0.0: Successfully uninstalled torch-1.0.0 Attempting uninstall: torchvision Found existing installation: torchvision 0.2.1 Uninstalling torchvision-0.2.1: Successfully uninstalled torchvision-0.2.1 Attempting uninstall: entrypoints Found existing installation: entrypoints 0.2.3 ERROR: Cannot uninstall 'entrypoints'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

จากนั้นฉันพิมพ์:

conda uninstall entrypoints pip install --upgrade pycodestyle pip install nuscenes-devkit

เสร็จแล้ว!


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