จะอัพเดท / อัพเกรดแพ็คเกจด้วย pip ได้อย่างไร?


171

วิธีการอัพเดทแพ็คเกจโดยใช้ pip คืออะไร? สิ่งเหล่านั้นไม่ทำงาน:

pip update
pip upgrade

ฉันรู้ว่านี่เป็นคำถามง่าย ๆ แต่เป็นสิ่งจำเป็นเนื่องจากไม่ใช่เรื่องง่ายที่จะหา ( เอกสารประกอบ pip ไม่ปรากฏขึ้นและคำถามอื่น ๆ จากกองล้นมีความเกี่ยวข้อง แต่ไม่ตรงกับที่)

คำตอบ:


280

วิธีคือ

sudo pip install [package_name] --upgrade

หรือในระยะสั้น

sudo pip install [package_name] -U

sudo จะขอให้ป้อนรหัสผ่านรูทของคุณเพื่อยืนยันการดำเนินการ

หากคุณไม่มีรหัสผ่านรูท (หากคุณไม่ใช่ผู้ดูแลระบบ) คุณควรทำงานกับvirtualenvและจากนั้นคุณควรวางsudo:

pip install [package_name] --upgrade

2
ในฐานะที่กล่าวว่า:pip install --help -U, --upgrade Upgrade all specified packages to the newest available version.ดังนั้นจึงควรจะเป็นกรณีบนไม่-U -u
ปีเตอร์เหลียงเห

25
ทำไมตัวเลือกทั่วไปแบบนั้นถึงไม่ปรากฏเมื่อคุณpip --helpทำตัวเป็นปริศนาให้ฉัน ...
ฮัสกี้

3
@ ฮัสกี้ - ใช่ในบรรทัดเดียวกันทำไมพวกเขาไม่เพียงแค่สร้างupgradeคำสั่งที่ทำในสิ่งที่คุณเห็นในคำตอบก็เป็นคำถามที่ดี (หมายความว่าถ้าคุณใช้ 'อัพเกรด' มันก็ทำสิ่งที่install+ --upgradeทำ) 'นามแฝง' แปลก ๆ
bshea

10

สำหรับแพคเกจที่ไม่เฉพาะเจาะจงและวิธีแก้ปัญหาทั่วไปที่มากขึ้นคุณสามารถตรวจสอบpip-review ได้เครื่องมือที่จะตรวจสอบว่าแพ็คเกจใดที่สามารถ / ควรได้รับการปรับปรุง

$ pip-review --interactive
requests==0.14.0 is available (you have 0.13.2)
Upgrade now? [Y]es, [N]o, [A]ll, [Q]uit y

3
แม้ว่าสิ่งนี้จะไม่ตอบคำถามโดยตรง แต่อาจเป็นสิ่งที่บางคนมองหาเมื่อพวกเขามองหาข้อความนี้
borgr

8

tl; dr script เพื่ออัพเดตแพ็คเกจที่ติดตั้งทั้งหมด

ถ้าคุณต้องการที่จะอัพเกรดหนึ่งแพคเกจให้ดูที่ @ borgr ของคำตอบ ฉันมักจะพบว่าจำเป็นหรืออย่างน้อยก็เพื่ออัพเกรดแพ็คเกจทั้งหมดในครั้งเดียว ปัจจุบันจุดเล็ก ๆ ไม่สนับสนุนการกระทำนั้น แต่ด้วยการเขียนสคริปต์มันง่ายพอ คุณสามารถใช้pip list, awk(หรือcutและtail) และคำสั่งเปลี่ยนตัว หนึ่งซับปกติของฉันคือ:

for i in $(pip list -o | awk 'NR > 2 {print $1}'); do sudo pip install -U $i; done

นี่จะขอรหัสผ่านรูท หากคุณไม่มีสิทธิ์เข้าถึง--userตัวเลือกpipหรือvirtualenvอาจเป็นสิ่งที่ควรพิจารณา


7
import subprocess as sbp
import pip
pkgs = eval(str(sbp.run("pip3 list -o --format=json", shell=True,
                         stdout=sbp.PIPE).stdout, encoding='utf-8'))
for pkg in pkgs:
    sbp.run("pip3 install --upgrade " + pkg['name'], shell=True)

บันทึกเป็น xx.py
จากนั้นเรียกใช้ Python3 xx.py
สภาพแวดล้อม: python3.5 + pip10.0 +


ฉันชอบวิธีนี้ ฉันได้เพิ่มการพิมพ์เพื่อแสดงชื่อแพ็คเกจระหว่างการอัพเดท:print('updating ', pkg['name'])
pvoj

4

ในการอัพเกรด pip สำหรับ Python3.4 + คุณต้องใช้ pip3 ดังนี้:

sudo pip3 install pip --upgrade

จะทำการอัพเกรด pip ที่: /usr/local/lib/python3.X/dist-packages

มิฉะนั้นในการอัพเกรด pip สำหรับ Python2.7 คุณต้องใช้ pip ดังนี้:

sudo pip install pip --upgrade

จะทำการอัพเกรด pip ที่: /usr/local/lib/python2.7/dist-packages


7
นี่ไม่ใช่สิ่งที่ OP ถาม เขาถามว่าจะอัพเกรดแพ็คเกจเฉพาะอย่างไรไม่ใช่ PIP
กำหนด

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