Установка определенных версий пакета с помощью pip - PullRequest
1106 голосов
/ 08 марта 2011

Я пытаюсь установить версию 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 в пакетах сайта.Это проблема, специфичная для данного пакета, или я что-то не так делаю?

Ответы [ 9 ]

767 голосов
/ 08 марта 2011

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

Однако вскоре вы обнаружите, что это не работает.Если вы посмотрите журнал установки pip или наберете 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
420 голосов
/ 19 ноября 2015

Вы даже можете использовать диапазон версий с командой pip install.Примерно так:

pip install 'stevedore>=1.3.0,<1.4.0'

А если пакет уже установлен и вы хотите понизить его версию, добавьте --force-reinstall следующим образом:

pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall
117 голосов
/ 04 апреля 2016

Один из способов, предложенных в этом сообщении , - упомянуть версию в pip как

pip install -Iv MySQL_python==1.2.2

т.е. Используйте == и укажите номер версии, чтобы установить только эту версию. -I, --ignore-installed игнорирует уже установленные пакеты.

55 голосов
/ 05 апреля 2018

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

pip install --force-reinstall MySQL_python==1.2.4

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

pip install MySQL_python==
35 голосов
/ 08 марта 2011

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

10 голосов
/ 06 января 2019

Иногда ранее установленная версия кэшируется.

~$ 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
3 голосов
/ 02 сентября 2018

Поскольку это, казалось, было критическое изменение, появившееся в версии 10 pip, я понизил версию до совместимой:

pip install 'pip<10' 

Эта команда указывает pip установить версию модуля ниже версии 10.Сделайте это в virutalenv , чтобы не испортить установку Python на своем сайте.

0 голосов
/ 22 февраля 2019

Я недавно столкнулся с проблемой при использовании pip '-I флага, который я хотел где-то документировать:

-I будет не удалить существующий пакет перед продолжением; он просто установит его поверх старого. Это означает, что любые файлы, которые должны быть удалены между версиями, будут оставаться на месте. Это может вызвать странное поведение, если эти файлы имеют общие имена с другими установленными модулями.

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

0 голосов
/ 12 ноября 2018

Есть 2 способа установить любой пакет с версией: - A). pip install -Iv package-name == версия В). pip install -v package-name == версия

Для A

Здесь, если вы используете опцию -I при установке (когда вы не знаете, установлен ли пакет) (например, 'pip install -Iv pyreadline == 2. *' или что-то в этом роде), вы можете установка нового отдельного пакета с тем же существующим пакетом, имеющим другую версию.

Для B

  1. Сначала вы можете проверить, нет ли нарушенных требований. пункт проверки

2.и посмотрим, что уже установлено список пунктов

3.Если в списке пакетов содержится какой-либо пакет, который вы хотите установить с определенной версией, то лучшим вариантом будет сначала удалить пакет этой версии, выполнив pip uninstall package-name

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

...