ฉันจะตรวจจับและลบแพ็คเกจ Python ที่ติดตั้งผ่าน pip ได้อย่างไร


73

ผมได้ติดตั้งแพคเกจบังเอิญหลามกับระบบของฉันโดยใช้แทนpip apt-getฉันทำสิ่งนี้ในสองวิธี:

  • ใช้ virtualenv รุ่นเก่ากว่าฉันลืมผนวก--no-site-packagesเมื่อสร้าง virtualenv - หลังจากนั้นเมื่อฉันเรียกpip installแพคเกจ Python ที่ติดตั้งไปยังระบบมากกว่า virtualenv
  • ในการตั้งค่า virtualenv อย่างถูกต้องฉันพิมพ์sudo pip install somepackage- sudo ติดตั้งกับระบบมากกว่า virtualenv

ฉันสังเกตเห็นสิ่งนี้เพราะฉันพิมพ์pip freezeนอก virtualenv และพบแพ็คเกจ Python บางรายการที่ไม่ควรอยู่ที่นั่น ดังนั้นตอนนี้คำถามของฉันคือ:

  • ฉันจะระบุแพ็คเกจ Python ทั้งหมดที่ติดตั้งผิดพลาดในระบบได้อย่างไร (นั่นคือ Python แพ็คเกจที่ปรากฏในpip freezeรายการ แต่ไม่ได้ติดตั้งapt-get)
  • ฉันจะลบออกได้อย่างไร

คำตอบ:


56

อูบุนตู oneiric (และผมคาดว่ารุ่นใหม่เกินไป) ติดตั้งแพคเกจ pip ไป/usr/local/lib/python2.7/dist-packagesและแพคเกจapt /usr/lib/python2.7/dist-packagesดังนั้นเพียงตรวจสอบไดเรกทอรีเดิมและsudo pip uninstallทุกแพ็คเกจที่คุณพบ


12
sudo rm -r /usr/local/lib/python2.7ผมไปที่โหดร้ายและออก จนถึงตอนนี้ดีมาก
Apteryx

@Apteryx ฉันทำแบบเดียวกันกับ/usr/local/lib/python3.5และหลังจากนั้นไม่นานการอัพเกรดupdate-notifier-commonแพ็คเกจล้มเหลวเนื่องจากไม่มีsixแพ็คเกจPython 3 ฉันสิ้นสุดการติดตั้งด้วยsix sudo -H pip3 install six
Alexey

2
@Apteryx พระเจ้าเจ้ากรรมเจ้าชาย! ฉันทำแบบเดียวกันและตอนนี้ระบบทั้งหมดของฉันก็หมดสติไปแล้ว! เพราะเกือบทุกอย่างในอูบุนตูพึ่งพา python!
yukashima huksay

ฉันสังเกตเห็นว่าตอนนี้ฉันมีไฟล์ปฏิบัติการที่ใช้งานไม่ได้/usr/local/bin/( ในช่วงเวลาที่ผ่านมาฉันเพิ่งลบ/usr/local/lib/python3.5และเปลี่ยนไปใช้conda )
Alexey

22

Pip ในขณะนี้ละเว้นคำสั่งถอนการติดตั้งที่พยายามถอนการติดตั้งบางสิ่งที่เป็นของระบบปฏิบัติการ ไม่เกิดข้อผิดพลาดเหมือนกับแพคเกจที่ขาดหายไป ดังนั้นตอนนี้คุณสามารถถอนการติดตั้งด้วยกระบวนการต่อไปนี้:

pip freeze > dump.txt

แก้ไขไฟล์ดัมพ์เพื่อลบ-eบรรทัด "ติดตั้งที่แก้ไขได้" ใด ๆทุกอย่างหลัง==เครื่องหมาย ( %s;==.*;;gเป็นกลุ่ม) สลับบรรทัดใหม่สำหรับช่องว่าง ( %s;\n; ;gเป็นกลุ่ม) จากนั้นคุณสามารถถอนการติดตั้งแพ็กเกจที่ไม่ได้เป็นเจ้าของทั้งหมดด้วย

cat dump.txt | xargs sudo pip uninstall -y

ฉันต้องทำตามขั้นตอนนี้สองครั้งเพราะมีแพ็คเกจบางตัวติดตั้งอยู่~/.local/libด้วย


1
นี่ควรเป็นคำตอบที่ได้รับการยอมรับ
Nam G VU

3
ทุกคนควรต้องการหนึ่งซับsudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')
ไร้สาระ

4
ระวัง! ขึ้นอยู่กับว่าระบบปฏิบัติการของคุณจัดส่งเวอร์ชั่นพิเศษpipหรือไม่ ใน Archlinux pipถอนการติดตั้งแพคเกจระบบอย่างมีความสุข ในทางตรงกันข้ามเจสซีpipเดเบียนบ่นและข้อผิดพลาด:Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
โทมัส G.

1
คุณต้องการ sudo ไหม - นี่เป็นคำตอบที่ได้รับการยอมรับอย่างแน่นอน
Jonathan

6

AFAIK จะติดตั้งบนsudo pip install /usr/local/lib/pythonVERSION/dist-packagesคุณต้องรันsudo pip uninstallเพื่อถอนการติดตั้งแพคเกจทั้งระบบ ดูเหมือนว่าpip freezeจะมองหาข้อมูลเมตาแพคเกจและจะแสดงรายการสิ่งที่ติดตั้งเช่นจาก pip และ apt-get นอก virtualenvs มี-lตัวเลือกภายในสภาพแวดล้อมเสมือนเพื่อแสดงรายการแพคเกจใช้ได้เฉพาะกับสภาพแวดล้อมเสมือนนั้น แต่ดูเหมือนว่าจะเป็นกรณีเริ่มต้นเช่นเดียวกับสภาพแวดล้อมเสมือน ฉันคิดว่าคุณสามารถลบแพ็คเกจที่เกี่ยวข้องด้วย/usr/local/lib/pythonVERSION/dist-packagesเช่นกัน แต่ไม่สะดวกมากฉันเดา


5

ในการลบแพ็คเกจที่ติดตั้งผ่าน pip เพียงกดCtrl+ Alt+ Tบนคีย์บอร์ดของคุณเพื่อเปิด Terminal เมื่อเปิดขึ้นให้เรียกใช้คำสั่งด้านล่าง

pip uninstall < package-name >

เพื่อค้นหาแพ็คเกจ

pip search <package you want to search for>

ในการพิจารณาแพ็คเกจ Python ที่ติดตั้งโดย pip โดยfreezeคำสั่งซึ่งจะให้รายการของแพ็คเกจที่ติดตั้งและเวอร์ชัน ฉันขอแนะนำให้ลบอินสแตนซ์ทั้งหมดและติดตั้งใหม่โดยใช้sudo apt-getคำสั่ง

sudo apt-get install python3

ฉันจะกำหนดแพ็คเกจ Python ที่ติดตั้งโดย pip และ apt-get ได้อย่างไร ฉันจะยังคงได้หรือไม่pip uninstallถ้าฉันใช้sudo pip installครั้งแรก?
david.libremone

@ d3vid pip freezeแสดงเฉพาะแพ็คเกจที่ติดตั้ง (AFAICS)
Oli

1
@oli pip แช่แข็งอย่างน้อยก็แม่นยำยังแสดงรายการแพ็คเกจที่ติดตั้งโดย apt เช่นเดียวกับคำตอบอื่น ๆ ที่นี่อธิบาย
nealmcb

0

ฉันต้องการล้างพื้นที่ดิสก์จากแพ็คเกจ Python อย่างปลอดภัย แม้ว่านี่จะเป็นการทำความสะอาดที่สมบูรณ์ของแพ็คเกจ แต่ฉันก็ต้องย้าย Python ไปด้วยดังนั้นฉันไม่ต้องการแพ็คเกจเก่า ฉันใช้สิ่งต่อไปนี้เพื่อรับชื่อแพ็กเกจทั้งหมดของฉันข้าม 2 บรรทัดแรกและคว้าคอลัมน์แรกและถอนการติดตั้งโดยไม่มีการโต้ตอบกับผู้ใช้:

pip list | awk 'NR>2 {print $1}' | xargs -I {} pip uninstall -y {}

-2

สิ่งนี้เกี่ยวข้องกับ Homebrew ฉันไม่มีปัญหาเกี่ยวกับ pyodbc ใน Mac Air จนกว่าฉันจะติดตั้ง Homebrew และใช้มันเพื่อบางสิ่ง ฉันพบกระทู้นี้ใน githubที่ลงท้ายด้วยโซลูชันที่เหมาะกับฉัน

"หากคุณมี Homebrew เพียงติดตั้งส่วนหัวของ ODBC:

$ brew install unixodbc

และเรียกใช้ "pip install pyodbc" อีกครั้ง "

100% นี้แก้ปัญหาสำหรับฉันและใช้เวลาสักครู่ ลองยิงดู


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