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

12 ответов

Решение

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

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

pip install 'stevedore>=1.3.0,<1.4.0'

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

pip install -Iv MySQL_python==1.2.2

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

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

pip install --force-reinstall MySQL_python==1.2.4

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

pip install MySQL_python==

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

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

~$ 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

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

pip install 'pip<10' 

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

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

Версия Python - 2.7

пакет - python-jenkins

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

Я недавно столкнулся с проблемой при использовании pip "s -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 при обновлении установленных версий пакета.

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

pip install MySQL_python --upgrade

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

Есть два способа установить любой пакет с версией: - 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. *

У пакета зависимостей появился новый выпуск, в котором LegacyVersion был удален из своей кодовой базы.
Быстрое решение может заключаться в упаковке закрепления == 21.3.

Другие вопросы по тегам