Menginstal versi paket tertentu dengan pip

1314

Saya mencoba menginstal versi 1.2.2 dari adaptor MySQL_python, menggunakan virtualenv baru yang dibuat dengan --no-site-packagesopsi. Versi saat ini ditunjukkan dalam PyPi adalah 1.2.3 . Apakah ada cara untuk menginstal versi yang lebih lama? Saya menemukan sebuah artikel yang menyatakan bahwa ini harus dilakukan:

pip install MySQL_python==1.2.2

Ketika diinstal, bagaimanapun, itu masih ditampilkan MySQL_python-1.2.3-py2.6.egg-infodalam paket situs. Apakah ini masalah khusus untuk paket ini, atau apakah saya melakukan sesuatu yang salah?

Joe
sumber
17
Terima kasih atas petunjuknya, ini berhasil bagi saya untuk menginstal versi openpyxl yang lebih lama viapip install MySQL_python==1.8.9
tim
4
Ya, ini juga berhasil untuk panda, terima kasih:pip install -Iv pandas==0.12.0
tandy
1
bekerja untuk saya juga: pip install xvfbwrapper ==
0.2.4

Jawaban:

895

TL; DR:

  • pip install -Iv(yaitu pip install -Iv MySQL_python==1.2.2)

Pertama, saya melihat dua masalah dengan apa yang Anda coba lakukan. Karena Anda sudah memiliki versi yang diinstal, Anda harus menghapus instalasi driver yang ada saat ini atau menggunakanpip install -I MySQL_python==1.2.2

Namun, Anda akan segera mengetahui bahwa ini tidak berhasil. Jika Anda melihat log instalasi pip, atau jika Anda melakukannya, pip install -Iv MySQL_python==1.2.2Anda akan menemukan bahwa tautan URL PyPI tidak berfungsi untuk MySQL_python v1.2.2. Anda dapat memverifikasi ini di sini: http://pypi.python.org/pypi/MySQL-python/1.2.2

Tautan pengunduhan 404s dan tautan URL fallback mengarahkan ulang secara tak terbatas karena peningkatan terbaru sourceforge.net dan URL basi PyPI.

Jadi untuk menginstal driver dengan benar, Anda dapat mengikuti langkah-langkah ini:

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
Mahmoud Abdelkader
sumber
1
Seharusnya tidak ada masalah dengan memiliki beberapa versi, itulah gunanya membuat folder baru untuk setiap versi dan menggunakan file .pth.
Jochen Ritzel
3
Ini menginstal versi yang benar jadi jawaban untuk pertanyaan ini - terima kasih atas bantuan Anda. Memukul masalah yang berbeda sekarang: "error: command '/usr/bin/gcc-4.2' gagal dengan status keluar 1" saat membangun ekstensi '_mysql'. Saya tahu bahwa saya memiliki GCC, dan instal untuk MySQL_python 1.2.3 berjalan dengan lancar. Apakah orang lain melihat masalah ini, khususnya 1.2.2?
Joe
Silakan buat pertanyaan lain dan poskan pesan kesalahan yang Anda dapat dari pip.
Mahmoud Abdelkader
2
Tentu - inilah tautannya: stackoverflow.com/questions/5226945/…
Joe
4
Penasaran mengapa Anda menggunakan opsi -I jika kami telah menghapus instalasi yang ada - dapatkah Anda memberikan detailnya?
Joe
509

Anda bahkan dapat menggunakan rentang versi dengan pip installperintah. Sesuatu seperti ini:

pip install 'stevedore>=1.3.0,<1.4.0'

Dan jika paket sudah diinstal dan Anda ingin menurunkannya tambahkan --force-reinstallseperti ini:

pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall
pengguna1978556
sumber
129
misalnya: $ pip install 'xkcdpass==1.2.5' --force-reinstall
jschank
1
sempurna! berlari pada Ubunto 15.04 dan (otomatis) mengganti perpustakaan yang ada dengan versi yang ditentukan. Memecahkan semua masalah saya!
zevij
2
Hanya akan menyebutkan bahwa untuk Python 2 saya harus menggunakan tanda kutip ganda "bukan '
Prime_Aqasix
6
@ HandofC'thuhlu saya pikir kita harus menggunakan tanda kutip ganda untuk windows dan bukan python 2
SmartManoj
3
Gunakan tanda kutip ganda pada Windows: pip install "stevedore> = 1.3.0, <1.4.0"
jmng
139

Salah satu cara, seperti yang disarankan dalam posting ini , adalah menyebutkan versi pipsebagai:

pip install -Iv MySQL_python==1.2.2

yaitu Gunakan ==dan sebutkan nomor versi untuk menginstal hanya versi itu. -I, --ignore-installedmengabaikan paket yang sudah diinstal.

Srikar Appalaraju
sumber
1
Waspadalah! Saya memiliki pengalaman bahwa ini menginstal versi yang berbeda di samping satu sama lain ! Menariknya, pip listtidak menyadarinya, tetapi conda list(dan akan menampilkan versi paket yang berbeda). Ini juga benar-benar membingungkan Pycharm .
Lionel Trebuchon
66

Untuk menginstal versi paket python tertentu apakah ini pertama kali, upgrade atau gunakan downgrade:

pip install --force-reinstall MySQL_python==1.2.4

MySQL_python versi 1.2.2 tidak tersedia jadi saya menggunakan versi yang berbeda. Untuk melihat semua versi paket yang tersedia dari indeks, tidak termasuk versi:

pip install MySQL_python==
Zach Weg
sumber
4
Dengan pip 10.0.1 ini adalah satu-satunya solusi yang berfungsi. Opsi "-I" sebenarnya menginstal ulang versi sebelumnya.
FedFranzoni
38

Saya percaya bahwa jika Anda sudah memiliki paket yang diinstal, pip tidak akan menimpanya dengan versi lain. Gunakan -Iuntuk mengabaikan versi sebelumnya.

dappawit
sumber
1
Saya tidak menginstalnya - menggunakan virtualenv baru yang dibuat dengan opsi --no-situs-paket
Joe
2
oke, jadi Anda meminta versi 1.2.2 dan masih menginstal 1.2.3, dan tidak ada lagi yang diinstal? Sintaks yang Anda gunakan benar untuk mendapatkan versi tertentu.
dappawit
"menggunakan virtualenv baru yang dibuat dengan opsi --no-situs-paket"; Anda mungkin perlu mengawali ini dengan perintah unset PYTHONPATHagar tidak pipmelihat perpustakaan yang sudah diinstal sebelumnya
user5359531
17

Kadang-kadang, versi yang diinstal sebelumnya di-cache.

~$ pip install pillow==5.2.0

Ini mengembalikan yang berikut:
Persyaratan sudah puas: pillow == 5.2.0 di /home/ubuntu/anaconda3/lib/python3.6/site-packages (5.2.0)

Kita dapat menggunakan --no-cache-dir bersama dengan -I untuk menimpa ini

~$ pip install --no-cache-dir -I pillow==5.2.0
Jack Chan
sumber
5

Karena ini tampaknya merupakan perubahan besar yang diperkenalkan pada versi 10 dari pip, saya menurunkan versi ke versi yang kompatibel:

pip install 'pip<10' 

Perintah ini memberitahu pip untuk menginstal versi modul yang lebih rendah dari versi 10. Lakukan ini di virutalenv sehingga Anda tidak mengacaukan pemasangan situs Anda dari Python.

Trenton
sumber
5

Saya baru-baru berlari ke masalah ketika menggunakan pip's -Ibendera yang saya ingin suatu tempat dokumen:

-Itidak akan menghapus paket yang ada sebelum melanjutkan; itu hanya akan menginstalnya di atas yang lama. Ini berarti bahwa semua file yang harus dihapus antar versi akan dibiarkan di tempatnya. Ini dapat menyebabkan perilaku aneh jika file-file tersebut berbagi nama dengan modul lain yang diinstal.

Sebagai contoh, katakanlah ada paket bernama package. Dalam salah satu packagefile, mereka gunakan import datetime. Sekarang, dalam [email protected], ini menunjuk ke datetimemodul perpustakaan standar , tetapi dalam [email protected], mereka menambahkan lokal datetime.pysebagai pengganti untuk versi perpustakaan standar (untuk alasan apa pun).

Sekarang katakanlah saya menjalankan pip install package==3.0.0, tetapi kemudian menyadari bahwa saya benar-benar menginginkan versi 2.0.0. Jika sekarang saya jalankan pip install -I package==2.0.0, file lama datetime.pytidak akan dihapus, jadi panggilan apa pun untuk import datetimeakan mengimpor modul yang salah.

Dalam kasus saya, ini dimanifestasikan dengan kesalahan sintaksis aneh karena versi yang lebih baru dari paket menambahkan file yang hanya kompatibel dengan Python 3, dan ketika saya menurunkan versi paket untuk mendukung Python 2, saya terus mengimpor modul hanya Python-3.

Berdasarkan ini, saya berpendapat bahwa menghapus paket lama selalu lebih baik daripada menggunakan -Iketika memperbarui versi paket yang diinstal.

0x5453
sumber
3

Perintah di bawah ini bekerja untuk saya

Versi Python - 2.7

paket - python-jenkins

perintah - $ pip install 'python-jenkins>=1.1.1'

Tapan Hegde
sumber
Dear downvoter, Tolong beri alasan mengapa jawaban ini dibatalkan?
Tapan Hegde
Saya tidak mengundurkan diri, tetapi dapat melihat bahwa ini tidak menjawab pertanyaan dan juga tidak memberikan informasi bermanfaat yang dapat digunakan OP untuk menyelesaikan masalah.
TheAmigo
0

Ada 2 cara Anda dapat menginstal paket apa pun dengan versi: - A). pip install -Iv package-name == versi B). pip install -v package-name == versi

Untuk sebuah

Di sini, jika Anda menggunakan opsi -I saat menginstal (ketika Anda tidak tahu apakah paket sudah diinstal) (seperti 'pip install -Iv pyreadline == 2. *' atau sesuatu), Anda akan menginstal yang baru paket terpisah dengan paket yang sama memiliki beberapa versi yang berbeda.

Untuk B

  1. Pada awalnya, Anda mungkin ingin memeriksa tidak ada persyaratan yang rusak. periksa pip

2.dan kemudian lihat apa yang sudah diinstal oleh daftar

3.jika daftar paket berisi paket yang ingin Anda instal dengan versi spesifik maka opsi yang lebih baik adalah menghapus instalasi paket versi ini terlebih dahulu, dengan pip uninstall paket-nama

4.Dan sekarang Anda dapat melanjutkan untuk menginstal ulang paket yang sama dengan versi tertentu, dengan pip instal -v paket-nama == versi misalnya pip instal -v pyreadline == 2. *

Samarth
sumber
0

Jika Anda ingin memperbarui ke versi terbaru dan Anda tidak tahu apa versi terbaru yang bisa Anda ketik.

pip instal MySQL_python --upgrade

Ini akan memperbarui MySQL_python untuk versi terbaru yang tersedia, Anda dapat menggunakan untuk versi paket lainnya.

DilMac
sumber