Встановлення конкретних версій пакета з допомогою pip


1312

Я намагаюся встановити версію 1.2.2 адаптера MySQL_python, використовуючи свіжий 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
tim

4
Так, це також спрацювало для панди, спасибі:pip install -Iv pandas==0.12.0
tandy

1
працював і для мене: pip install xvfbwrapper == 0.2.4
amitdatta

Відповіді:


894

TL; DR:

  • pip install -Iv(тобто pip install -Iv MySQL_python==1.2.2)

По-перше, я бачу два питання з тим, що ви намагаєтеся зробити. Оскільки у вас вже є встановлена ​​версія, вам слід або видалити наявний драйвер, або використовуватиpip install -I MySQL_python==1.2.2

Однак незабаром ви дізнаєтесь, що це не працює. Якщо ви подивитеся на журнал встановлення pip install -Iv MySQL_python==1.2.2файлу pip, або якщо ви це зробите, то виявите, що посилання URL-адреси PyPI не працює для 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?
Джо

Поставте ще одне запитання, будь ласка, і опублікуйте повідомлення про помилку, яке ви отримуєте від pip
Махмуд Абделькадер

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


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 .
Ліонель

66

Щоб встановити певну версію пакету python, будь ласка, це вперше, оновлення або пониження:

pip install --force-reinstall MySQL_python==1.2.4

MySQL_python версії 1.2.2 недоступний, тому я використовував іншу версію. Щоб переглянути всі доступні версії пакета з індексу, виключіть версію:

pip install MySQL_python==

4
З pip 10.0.1 це єдине робоче рішення. Параметр "-I" фактично перевстановлює попередню версію.
ФедФранцоні

38

Я вважаю, що якщо у вас вже встановлений пакет, pip не замінить його іншою версією. Використовуйте -Iдля ігнорування попередніх версій.


1
У мене його не встановлено - використовуючи свіжий virtualenv, створений за допомогою опції --no-site-пакети
Joe

2
гаразд, тому ви запитуєте версію 1.2.2, і вона все ще встановлює 1.2.3, і нічого іншого не було встановлено? Синтаксис, який ви використовували, є правильним для отримання конкретних версій.
dappawit

"використання свіжого virtualenv, створеного за допомогою параметра --no-site-пакети"; вам може знадобитися попередньо виконати цю команду, unset PYTHONPATHщоб не pipбачити попередньо встановлених бібліотек
user5359531

17

Іноді попередньо встановлена ​​версія кешується.

~$ pip install pillow==5.2.0

Він повертає наступні
вимоги : Вимога вже задоволена: подушка == 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

Оскільки це, здавалося, було безперервною зміною, внесеною у версію 10 pip, я перейшов на сумісну версію:

pip install 'pip<10' 

Ця команда повідомляє pip встановити версію модуля нижче версії 10. Зробіть це у virutalenv, щоб ви не накрутили установку Python на своєму сайті.


5

Нещодавно я зіткнувся з проблемою при використанні pip«s -Iпрапор , який я хотів де - небудь документ:

-Iне буде видаляти наявний пакет перед тим, як продовжити; він просто встановить його поверх старої. Це означає, що будь-які файли, які слід видалити між версіями, замість цього залишаться на місці. Це може спричинити дивну поведінку, якщо ці файли діляться іменами з іншими встановленими модулями.

Наприклад, скажімо, що існує пакет з іменем package. В одному з packageфайлів s вони використовують 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

пакет - пітон-джинкіни

команда - $ pip install 'python-jenkins>=1.1.1'


Шановний супротивник, будь ласка, обґрунтуйте, чому ця відповідь спростована?
Тапан Гегде

Я не заявив, але бачу, що це не дає відповіді на питання, а також не надає корисної інформації, яку ОП може використовувати для вирішення проблеми.
TheAmigo

0

Є два способи встановлення будь-якого пакета з версією: - A). pip install -Iv package-name == версія B). pip install -v package-name == версія

Для

Тут, якщо ви використовуєте -I варіант під час встановлення (коли ви не знаєте, чи пакет уже встановлений) (наприклад, 'pip install -Iv pyreadline == 2. *' або щось подібне), ви встановите новий окремий пакет з тим самим існуючим пакетом, що має деяку різну версію.

Для В

  1. Спочатку ви можете перевірити відсутність порушених вимог. піп перевірка

2.і потім подивіться, що вже встановлено у списку піп

3. Якщо перелік пакунків містить будь-який пакет, який ви хочете встановити з певною версією, тоді кращим варіантом буде спочатку видалити пакунок цієї версії за допомогою pip uninstall name-name.

4.А тепер ви можете перевстановити той самий пакет із певною версією, встановивши pip install -v package-name == версія, наприклад, pip install -v pyreadline == 2. *


0

Якщо ви хочете оновити до останньої версії, і ви не знаєте, яку саме останню версію ви можете ввести.

pip встановити MySQL_python --upgrade

Це дозволить оновити MySQL_python для останньої доступної версії, яку можна використовувати для будь-якої іншої версії пакета.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.