Установка определенных версий пакета с помощью pip

1314

Я пытаюсь установить версию 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

Ответы:

895

TL; DR:

  • pip install -Iv(то есть pip install -Iv MySQL_python==1.2.2)

Во-первых, я вижу две проблемы с тем, что вы пытаетесь сделать. Поскольку у вас уже есть установленная версия, вы должны либо удалить текущий существующий драйвер, либо использоватьpip install -I MySQL_python==1.2.2

Тем не менее, вы скоро обнаружите, что это не работает. Если вы посмотрите журнал установки pip или сделаете a, pip install -Iv MySQL_python==1.2.2то обнаружите, что URL-ссылка PyPI не работает для MySQL_python v1.2.2. Вы можете проверить это здесь: http://pypi.python.org/pypi/MySQL-python/1.2.2

Ссылка 404 для скачивания и резервные 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.
Йохен Ритцель
3
Это устанавливает правильную версию, так что ответ на этот вопрос - спасибо за вашу помощь. Теперь возникает другая проблема: «ошибка: команда« /usr/bin/gcc-4.2 »завершилась неудачно с состоянием выхода 1» при создании расширения «_mysql». Я знаю, что у меня есть GCC, и установка для MySQL_python 1.2.3 проходит без проблем. Другие видели эту проблему, особенно с 1.2.2?
Джо
Задайте другой вопрос, пожалуйста, и опубликуйте сообщение об ошибке, которое вы получаете от pip.
Махмуд Абделькадер
2
Конечно, вот ссылка: stackoverflow.com/questions/5226945/…
Джо
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
user1978556
источник
129
например: $ pip install 'xkcdpass==1.2.5' --force-reinstall
jschank
1
идеально! работал на Ubunto 15.04, и он (автоматически) заменил существующую библиотеку указанной версией. Решил все мои проблемы!
Зевий
2
Просто хочу упомянуть, что для Python 2 мне пришлось использовать двойные кавычки «вместо»
Prime_Aqasix
6
@ HandofC'thuhlu Я думаю, что мы должны использовать двойные кавычки для окон, а не Python 2
SmartManoj
3
Используйте двойные кавычки в Windows: pip install "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был (и будет отображать различные версии пакета). Это также полностью смутило Пихарма .
Лайонел Требушон
66

Чтобы установить конкретную версию пакета Python, будь то первый раз, обновление или переход на более раннюю версию:

pip install --force-reinstall MySQL_python==1.2.4

MySQL_python версии 1.2.2 недоступен, поэтому я использовал другую версию. Для просмотра всех доступных версий пакета из индекса исключите версию:

pip install MySQL_python==
Зак Вег
источник
4
С пипсом 10.0.1 это единственное рабочее решение. Опция "-I" фактически переустанавливает предыдущую версию.
FedFranzoni
38

Я считаю, что если у вас уже установлен пакет, pip не перезапишет его другой версией. Используйте, -Iчтобы игнорировать предыдущие версии.

dappawit
источник
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

Возвращает следующее:
Требование уже выполнено: подушка == 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файлов они используют import datetime. Теперь, package@2.0.0это указывает на datetimeмодуль стандартной библиотеки , но package@3.0.0они добавили local 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при обновлении версий установленных пакетов.

0x5453
источник
3

Эта команда ниже работала для меня

Версия Python - 2.7

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

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

Тапан Хегде
источник
Уважаемый downvoter, пожалуйста, обоснуйте, почему этот ответ понизили?
Тапан Хегде
Я не отрицал, но вижу, что это не отвечает на вопрос и не предоставляет никакой полезной информации, которую ОП может использовать для решения проблемы.
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 package-name

4. А теперь вы можете переустановить тот же пакет с определенной версией, установив pip -v package-name == версия, например, pip install -v pyreadline == 2. *

Samarth
источник
0

Если вы хотите обновить до последней версии, и вы не знаете, какую последнюю версию вы можете набрать.

pip install MySQL_python --upgrade

Это обновит MySQL_python до последней доступной версии, которую вы можете использовать для любой другой версии пакета.

Dilmac
источник