it-swarm.com.ru

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

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

980
Joe

Во-первых, я вижу две проблемы с тем, что вы пытаетесь сделать. Поскольку у вас уже есть установленная версия, вы должны либо удалить текущий существующий драйвер, либо использовать 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
700
Mahmoud Abdelkader

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

pip install 'stevedore>=1.3.0,<1.4.0'

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

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

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

pip install -Iv MySQL_python==1.2.2

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

106
Srikar Appalaraju

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

pip install --force-reinstall MySQL_python==1.2.4

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

pip install MySQL_python==
43
Zach Weg

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

35
dappawit

Поскольку в версии 10 pip это явное изменение, я понизил его до совместимой версии:

pip install 'pip<10' 

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

3
Trenton

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

~$ 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
2
Jack Chan

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

Для

Здесь, если вы используете опцию -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. *

0
Samarth

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

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

Например, скажем, есть пакет с именем package. В одном из файлов packages они используют import datetime. Теперь в packag[email protected] это указывает на модуль стандартной библиотеки datetime, но в [email protected] они добавили локальный 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
0x5453