บายพาสยืนยันการถอนการติดตั้ง pip


93

ฉันกำลังพยายามถอนการติดตั้งแพ็คเกจ django ทั้งหมดในสภาพแวดล้อม superuser ของฉันเพื่อให้แน่ใจว่าการอ้างอิงเว็บแอพทั้งหมดของฉันได้รับการติดตั้งลงใน Virtualenv ของฉัน

sudo su
sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall

แต่ pip ต้องการยืนยันการถอนการติดตั้งทุกแพ็คเกจและดูเหมือนจะไม่มี-yตัวเลือกสำหรับ pip มีวิธีที่ดีกว่าในการถอนการติดตั้งชุดโมดูล python หรือไม่? เป็นrm -rf .../site-packages/วิธีการที่เหมาะสมจะไป? มีทางเลือก easy_install หรือไม่?

หรืออีกวิธีหนึ่งจะเป็นการดีกว่าหรือไม่ที่จะบังคับให้ pip ติดตั้งการอ้างอิงทั้งหมดกับ Virtualenv แทนที่จะใช้โมดูล python ของระบบเพื่อตอบสนองการอ้างอิงเหล่านั้นเช่นpip --upgrade installแต่บังคับให้ติดตั้งเวอร์ชันเก่าเท่า ๆ กันเพื่อแทนที่โมดูลระบบใด ๆ ฉันลองเปิดใช้งาน Virtualenv ของฉันแล้วpip install --upgrade -r requirements.txtดูเหมือนว่าจะติดตั้งการอ้างอิงแม้กระทั่งสิ่งที่มีอยู่ในเส้นทางระบบของฉัน แต่ฉันไม่แน่ใจว่านั่นเป็นเพราะโมดูลระบบของฉันเก่าหรือไม่ และman pipดูเหมือนจะไม่รับประกันพฤติกรรมนี้ (เช่นการติดตั้งแพ็กเกจเวอร์ชันเดียวกันกับที่มีอยู่แล้วในไซต์แพ็กเกจของระบบ)

คำตอบ:


204

เริ่มต้นด้วย pip เวอร์ชัน 7.1.2 คุณสามารถเรียกใช้ pip uninstall -y <python package(s)>

pip uninstall -y package1 package2 package3

หรือจากไฟล์

pip uninstall -y -r requirements.txt

65

Pip ไม่รวมอ็อพชัน a --yes (ณ pip เวอร์ชัน 1.3.1)

วิธีแก้ปัญหา: ไปป์ใช่แล้ว!

$ sudo ls  # enter pw so not prompted again
$ /usr/bin/yes | sudo pip uninstall pymongo

2
อ่าง่ายแค่ไหน ขอบคุณสำหรับการแจ้งเตือนโปรแกรมยูนิกซ์ yesมีประโยชน์มาก
เตาปรุงอาหาร

แต่ฉันไม่คิดว่ามันจะได้ผล (วันนี้ขี้อายเกินไปที่จะลองใช้กับระบบของฉัน) yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstallเพราะyeses จะถูกกลืนโดยpip freezeไม่ใช่xargsอาร์กิวเมนต์ / คำสั่ง, pip uninstall.
เตาปรุงอาหาร

3
pip freeze > all_to_uninstall.txt yes | pip uninstall -r all_to_uninstall.txt
นิค

8

หากคุณต้องการที่จะถอนการติดตั้งแพคเกจจากทุกrequirements.txt,

pip uninstall -y -r requirements.txt

1

หรืออีกวิธีหนึ่งจะเป็นการดีกว่าหรือไม่ที่จะบังคับให้ pip ติดตั้งการอ้างอิงทั้งหมดกับ Virtualenv แทนที่จะใช้โมดูล python ของระบบเพื่อตอบสนองการอ้างอิงเหล่านั้น

ใช่. อย่ายุ่งกับแพ็คเกจที่ติดตั้งระบบ inbuilt มากเกินไป แพ็กเกจระบบจำนวนมากโดยเฉพาะใน OS X (แม้แต่เดเบียนและพันธุ์ที่ได้รับ) ขึ้นอยู่กับแพ็กเกจมากเกินไป

pip - อัปเกรดติดตั้ง แต่บังคับให้ติดตั้งเวอร์ชันเก่าเท่า ๆ กันเพื่อแทนที่โมดูลระบบใด ๆ

ไม่ควรเป็นเรื่องใหญ่หากมีแพ็คเกจเพิ่มเติมอีกสองสามแพ็คเกจที่ติดตั้งภายใน venv ที่มีอยู่แล้วในแพ็คเกจระบบโดยเฉพาะอย่างยิ่งหากเป็นเวอร์ชันที่แตกต่างกัน นั่นคือจุดรวมของ Virtualenv

ฉันลองเปิดใช้งาน Virtualenv ของฉันแล้ว pip install --upgrade -r requirements.txt และดูเหมือนว่าจะติดตั้งการอ้างอิงแม้กระทั่งสิ่งที่มีอยู่ในเส้นทางระบบของฉัน แต่ฉันไม่แน่ใจว่าเป็นเพราะโมดูลระบบของฉันเก่าหรือไม่ และ man pip ดูเหมือนจะไม่รับประกันพฤติกรรมนี้ (เช่นการติดตั้งแพ็กเกจเวอร์ชันเดียวกับที่มีอยู่แล้วในไซต์แพ็กเกจของระบบ)

ไม่มันไม่ได้ติดตั้งแพ็กเกจที่มีอยู่แล้วในการติดตั้งหลักเว้นแต่คุณจะใช้--no-site-packagesแฟล็กเพื่อสร้างหรือเวอร์ชันที่ต้องการและเวอร์ชันปัจจุบันจะแตกต่างกัน ..


1

Lakshman Prasad พูดถูกpip --upgradeและ / หรือvirtualenv --no-site-packagesเป็นหนทางที่จะไป การถอนการติดตั้งโมดูล python ทั้งระบบไม่ดี

--upgradeตัวเลือกที่จะ pip ไม่จำเป็นต้องติดตั้งโมดูลใน env เสมือนแม้ว่าพวกเขามีอยู่แล้วในสภาพแวดล้อมของระบบและแม้ว่ารุ่นที่ต้องการหรือรุ่นล่าสุดที่สามารถใช้ได้เป็นเช่นเดียวกับรุ่นระบบ

pip --upgrade install

และการใช้อ็อพชัน --no-site-แพ็กเกจเมื่อสร้างสภาพแวดล้อมเสมือนช่วยให้มั่นใจได้ว่าการอ้างอิงที่ขาดหายไปไม่สามารถถูกปิดบังโดยการมีโมดูลที่ขาดหายไปในเส้นทางระบบ สิ่งนี้ช่วยเปิดเผยปัญหาระหว่างการย้ายโมดูลจากแพ็กเกจหนึ่งไปยังอีกแพ็กเกจเช่น pinax.apps.groups -> django-groups โดยเฉพาะอย่างยิ่งเมื่อปัญหาเกิดขึ้นกับคำสั่ง load templatetags ใน django ซึ่งค้นหาโมดูลที่มีทั้งหมดสำหรับไดเร็กทอรี templatetags และคำจำกัดความของแท็ก ภายใน.


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