การติดตั้งแพคเกจเฉพาะรุ่นด้วย pip


1313

ฉันกำลังพยายามติดตั้งอะแดปเตอร์ MySQL_python เวอร์ชัน 1.2.2 โดยใช้ virtualenv ใหม่ที่สร้างด้วย--no-site-packagesตัวเลือก รุ่นปัจจุบันที่แสดงใน PyPi เป็น1.2.3 มีวิธีติดตั้งเวอร์ชั่นเก่ากว่านี้ไหม? ฉันพบบทความที่ระบุว่าควรทำสิ่งนี้:

pip install MySQL_python==1.2.2

อย่างไรก็ตามเมื่อติดตั้งแล้วจะยังคงปรากฏMySQL_python-1.2.3-py2.6.egg-infoในแพ็คเกจไซต์ นี่เป็นปัญหาเฉพาะของแพคเกจนี้หรือฉันกำลังทำอะไรผิดหรือเปล่า?


17
ขอบคุณสำหรับคำแนะนำสิ่งนี้ใช้ได้ผลกับฉันในการติดตั้ง openpyxl เวอร์ชันเก่าผ่านทางpip install MySQL_python==1.8.9
ทิม

4
ใช่มันใช้ได้กับนุ่นด้วยเช่นกันขอบคุณ:pip install -Iv pandas==0.12.0
tandy

1
ทำงานให้ฉันด้วยเช่นกัน: pip install xvfbwrapper == 0.2.4
amitdatta

คำตอบ:


895

TL; DR:

  • pip install -Iv(เช่นpip install -Iv MySQL_python==1.2.2)

ก่อนอื่นฉันเห็นสองประเด็นเกี่ยวกับสิ่งที่คุณพยายามจะทำ เนื่องจากคุณมีรุ่นที่ติดตั้งแล้วคุณควรถอนการติดตั้งไดรเวอร์ปัจจุบันหรือใช้งานpip install -I MySQL_python==1.2.2

อย่างไรก็ตามในไม่ช้าคุณจะพบว่าสิ่งนี้ไม่ได้ผล หากคุณดูบันทึกการติดตั้งของ pip หรือถ้าคุณทำpip install -Iv MySQL_python==1.2.2คุณจะพบว่าลิงก์ PyPI URL ไม่สามารถใช้งานได้กับ MySQL_python v1.2.2 คุณสามารถตรวจสอบได้ที่นี่: http://pypi.python.org/pypi/MySQL-python/1.2.2

ลิงค์ดาวน์โหลด 404s และลิงค์ URL ทางเลือกนั้นนำเสนอใหม่อย่างไม่ จำกัด เนื่องจากการอัปเกรดล่าสุดของ sourceforge.net และ URL เก่าของ PyPI

ดังนั้นในการติดตั้งไดรเวอร์อย่างถูกต้องคุณสามารถทำตามขั้นตอนเหล่านี้:

pip uninstall MySQL_python
pip install -Iv http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.2/MySQL-python-1.2.2.tar.gz/download

1
ไม่น่าจะมีปัญหากับการมีหลาย ๆ เวอร์ชันนั่นคือจุดของการสร้างโฟลเดอร์ใหม่สำหรับทุก ๆ เวอร์ชันและการใช้ไฟล์. pth
Jochen Ritzel

3
นี่เป็นการติดตั้งเวอร์ชั่นที่ถูกต้องดังนั้นจึงเป็นคำตอบสำหรับคำถามนี้ - ขอบคุณสำหรับความช่วยเหลือของคุณ กำลังตีปัญหาที่แตกต่างกันในขณะนี้: "ข้อผิดพลาด: คำสั่ง '/usr/bin/gcc-4.2' ล้มเหลวด้วยสถานะออก 1" ในขณะที่สร้างส่วนขยาย '_mysql' ฉันรู้ว่าฉันมี GCC และการติดตั้งสำหรับ MySQL_python 1.2.3 เป็นไปอย่างราบรื่น มีคนอื่นเห็นปัญหานี้โดยเฉพาะกับ 1.2.2 หรือไม่
Joe

โปรดสร้างคำถามเพิ่มเติมและโพสต์ข้อความแสดงข้อผิดพลาดที่คุณได้รับจาก pip
Mahmoud Abdelkader

2
แน่นอน - นี่คือลิงค์: stackoverflow.com/questions/5226945/…
Joe

4
อยากรู้ว่าทำไมคุณถึงใช้ตัวเลือก -I ถ้าเราลบการติดตั้งที่มีอยู่ไปแล้ว - คุณช่วยบอกรายละเอียดเกี่ยวกับสิ่งนั้นได้ไหม
โจ

509

คุณสามารถใช้ช่วงเวอร์ชันด้วยpip installคำสั่ง บางสิ่งเช่นนี้

pip install 'stevedore>=1.3.0,<1.4.0'

และถ้าแพ็คเกจนี้ได้รับการติดตั้งแล้วและคุณต้องการที่จะลดระดับมันเพิ่ม--force-reinstallเช่นนี้:

pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall

128
ตัวอย่างเช่น: $ pip install 'xkcdpass==1.2.5' --force-reinstall
jschank

1
ที่สมบูรณ์แบบ! รันบน Ubunto 15.04 และแทนที่ (โดยอัตโนมัติ) ไลบรารีที่มีอยู่ด้วยเวอร์ชันที่ระบุ แก้ไขปัญหาทั้งหมดของฉัน!
zevij

2
เพิ่งจะพูดถึงเรื่องนี้สำหรับ Python 2 ฉันต้องใช้เครื่องหมายคำพูดคู่ "แทน '
Prime_Aqasix

6
@ HandofC'thuhlu ฉันคิดว่าเราต้องใช้เครื่องหมายคำพูดคู่สำหรับ windows และไม่ใช่ python 2
SmartManoj

3
ใช้เครื่องหมายคำพูดคู่บน Windows: ติดตั้ง pip "stevedore> = 1.3.0, <1.4.0"
jmng

139

วิธีหนึ่งตามที่แนะนำในโพสต์นี้คือการพูดถึงรุ่นpipเป็น:

pip install -Iv MySQL_python==1.2.2

เช่นใช้==และกล่าวถึงหมายเลขรุ่นเพื่อติดตั้งเฉพาะรุ่นนั้น -I, --ignore-installedข้ามแพคเกจที่ติดตั้งไปแล้ว


1
ระวัง! ฉันมีประสบการณ์ว่าสิ่งนี้ติดตั้งเวอร์ชันที่แตกต่างกันถัดจากกัน ! สิ่งที่น่าสนใจpip listคือไม่ทราบว่าเป็นเช่นนั้น แต่conda listเป็น (และจะแสดงเวอร์ชันของแพ็คเกจอื่น) นอกจากนี้ยังสมบูรณ์สับสนPycharm
Lionel Trebuchon

66

ในการติดตั้งแพคเกจหลามเฉพาะรุ่นไม่ว่าจะเป็นครั้งแรกการอัพเกรดหรือการลดระดับจะใช้:

pip install --force-reinstall MySQL_python==1.2.4

MySQL_python เวอร์ชั่น 1.2.2 ไม่พร้อมใช้งานดังนั้นฉันจึงใช้เวอร์ชันอื่น หากต้องการดูเวอร์ชันแพ็คเกจทั้งหมดที่มีอยู่จากดัชนีไม่รวมเวอร์ชัน:

pip install MySQL_python==

4
ด้วย pip 10.0.1 นี่เป็นทางออกเดียวที่ทำงานได้ ตัวเลือก "-I" จะติดตั้งเวอร์ชันก่อนหน้าอีกครั้ง
FedFranzoni

38

ฉันเชื่อว่าถ้าคุณมีแพ็คเกจที่ติดตั้งแล้ว pip จะไม่เขียนทับมันกับเวอร์ชั่นอื่น ใช้-Iเพื่อละเว้นเวอร์ชันก่อนหน้า


1
ฉันไม่ได้ติดตั้ง - ใช้ virtualenv ใหม่ที่สร้างด้วยตัวเลือก --no-site-packages
Joe

2
โอเคดังนั้นคุณจึงขอรุ่น 1.2.2 และยังคงติดตั้ง 1.2.3 และไม่มีการติดตั้งอะไรอีก? ไวยากรณ์ที่คุณใช้นั้นถูกต้องสำหรับการรับรุ่นที่เฉพาะเจาะจง
dappawit

"ใช้ virtualenv ใหม่ที่สร้างด้วยตัวเลือก --no-site-packages"; คุณอาจต้องนำหน้าสิ่งนี้ด้วยคำสั่งunset PYTHONPATHเพื่อป้องกันมิให้pipเห็นไลบรารีที่ติดตั้งไว้ล่วงหน้าของคุณ
user5359531

17

บางครั้งรุ่นที่ติดตั้งไว้ก่อนหน้านี้จะถูกแคช

~$ pip install pillow==5.2.0

จะคืนค่าดังต่อไปนี้:
ความต้องการที่ได้รับการตอบสนองเรียบร้อยแล้ว: pillow == 5.2.0 ใน /home/ubuntu/anaconda3/lib/python3.6/site-packages (5.2.0)

เราสามารถใช้ - no-cache-dir พร้อมกับ -I เพื่อเขียนทับสิ่งนี้

~$ pip install --no-cache-dir -I pillow==5.2.0

5

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

pip install 'pip<10' 

คำสั่งนี้บอกให้ pip ทำการติดตั้งเวอร์ชั่นของโมดูลที่ต่ำกว่าเวอร์ชั่น 10 ทำสิ่งนี้ในvirutalenvเพื่อที่คุณจะไม่พลาดการติดตั้ง Python ของเว็บไซต์


5

ฉันเพิ่งวิ่งเข้าไปในปัญหาเมื่อใช้pip's -Iธงว่าฉันอยากจะอยู่ที่ไหนสักแห่งเอกสาร:

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

packageตัวอย่างเช่นสมมติว่ามีแพคเกจชื่อ ในตอนหนึ่งของpackages import datetimeไฟล์ที่พวกเขาใช้ ในตอนpackage@2.0.0นี้สิ่งนี้ชี้ไปที่datetimeโมดูลไลบรารีมาตรฐานแต่ในpackage@3.0.0พวกเขาเพิ่มโลคัลdatetime.pyเพื่อแทนที่ไลบรารีเวอร์ชันมาตรฐาน (ไม่ว่าด้วยเหตุผลใดก็ตาม)

ตอนนี้ให้บอกว่าฉันวิ่งpip install package==3.0.0แต่ต่อมาก็ตระหนักว่าฉันต้องการรุ่น2.0.0จริง ถ้าผมทำงานในขณะนี้pip install -I package==2.0.0, เก่าdatetime.pyไฟล์จะไม่ถูกลบออกเพื่อโทรใด ๆ ที่import datetimeจะนำเข้าโมดูลที่ไม่ถูกต้อง

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

จากนี้ฉันจะยืนยันว่าการถอนการติดตั้งแพคเกจเก่ามักจะดีกว่าที่จะใช้-Iเมื่อมีการปรับปรุงรุ่นแพคเกจที่ติดตั้ง


3

คำสั่งด้านล่างนี้ใช้งานได้สำหรับฉัน

Python เวอร์ชั่น 2.7

แพ็คเกจ - python-jenkins

คำสั่ง - $ pip install 'python-jenkins>=1.1.1'


เรียนผู้ลงคะแนนเสียงโปรดอธิบายว่าทำไมคำตอบนี้จึงลดลง
Tapan Hegde

ฉันไม่ได้ลงคะแนน แต่สามารถเห็นว่าสิ่งนี้ไม่ตอบคำถามหรือให้ข้อมูลที่เป็นประโยชน์ใด ๆ ที่ OP สามารถใช้เพื่อแก้ไขปัญหา
TheAmigo

0

มี 2 ​​วิธีที่คุณสามารถติดตั้งแพ็คเกจใด ๆ กับเวอร์ชั่น: - A) pip ติดตั้ง -Iv package-name == เวอร์ชั่น B) pip install -v package-name == version

สำหรับ

ที่นี่หากคุณใช้ตัวเลือก -I ขณะติดตั้ง (เมื่อคุณไม่ทราบว่ามีการติดตั้งแพ็กเกจไว้แล้ว) (เช่น 'pip install -Iv pyreadline == 2. *' หรืออะไรบางอย่าง) คุณจะติดตั้งใหม่ แยกแพ็คเกจด้วยแพ็คเกจเดิมที่มีเวอร์ชั่นต่างกัน

สำหรับ B

  1. ในตอนแรกคุณอาจต้องการตรวจสอบความต้องการไม่แตก ตรวจสอบจุดเล็ก ๆ

2. จากนั้นดูสิ่งที่ติดตั้งแล้วโดย รายการ pip

3. ถ้ารายการของแพ็คเกจมีแพ็คเกจใด ๆ ที่คุณต้องการติดตั้งด้วยรุ่นที่เฉพาะเจาะจงตัวเลือกที่ดีกว่าคือการถอนการติดตั้งแพ็คเกจของรุ่นนี้ก่อนโดย การถอนการติดตั้ง pip-name

4. และตอนนี้คุณสามารถไปข้างหน้าเพื่อติดตั้งแพคเกจเดียวกันกับรุ่นที่ระบุโดย pip install -v package-name == เวอร์ชัน เช่น pip install -v pyreadline == 2 *


0

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

pip ติดตั้ง MySQL_python - อัปเกรด

สิ่งนี้จะอัปเดต MySQL_python สำหรับรุ่นล่าสุดที่มีอยู่คุณสามารถใช้สำหรับแพ็คเกจอื่น ๆ

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