pip: работа с несколькими версиями Python?

Есть ли способ сделать pip хорошо играть с несколькими версиями Python? Например, я хочу использовать pip явная установка вещей либо на мой сайт 2.5, либо на мой сайт 2.6.

Например, с easy_install, Я использую easy_install-2.{5,6},

И да - я знаю о virtualenv, и нет - это не решение этой конкретной проблемы.

31 ответ

Решение

Текущая рекомендация заключается в использовании python -m pip, где python это версия, которую вы хотели бы использовать. Это рекомендация, потому что она работает во всех версиях Python и во всех формах virtualenv. Например:

# The system default python:
$ python -m pip install fish

# A virtualenv's python:
$ .env/bin/python -m pip install fish

# A specific version of python:
$ python-3.6 -m pip install fish

Предыдущий ответ, оставленный для потомков:

Начиная с версии 0.8, Pip поддерживает pip-{version}, Вы можете использовать его так же, как easy_install-{version}:

$ pip-2.5 install myfoopackage
$ pip-2.6 install otherpackage
$ pip-2.7 install mybarpackage

РЕДАКТИРОВАТЬ: Пип изменил свою схему для использования pipVERSION вместо pip-VERSION в версии 1.5. Вы должны использовать следующее, если у вас есть pip >= 1.5:

$ pip2.6 install otherpackage
$ pip2.7 install mybarpackage

Проверьте https://github.com/pypa/pip/pull/1053 для получения более подробной информации


Рекомендации:

В Windows вы можете запустить модуль pip, упомянув версию Python (необходимо убедиться, что программа запуска находится на вашем пути)

py -3.4 -m pip install pyfora

py -2.7 -m pip install pyfora

В качестве альтернативы, вы можете вызвать нужный исполняемый файл Python, например, так:

/path/to/python.exe -m pip install pyfora

/path/to/python2.{5,6} /path/to/pip install PackageName не работает?

Чтобы это работало на любой версии Python, в которой еще не установлен pip, вам нужно скачать pip и сделать python*version* setup.py install, Например python3.3 setup.py install, Это устраняет ошибку импорта в комментариях. (Как предложено @hbdgaf)

У меня был установлен Python 2.6 по умолчанию (Amazon EC2 AMI), но мне нужно было python2.7 плюс некоторые внешние пакеты для моего приложения. Предполагая, что вы уже установили python2.7 вместе со стандартным python (2.6 в моем случае). Вот как установить pip и пакеты для нестандартного python2.7

Установите pip для вашей версии Python:

curl -O https://bootstrap.pypa.io/get-pip.py
python27 get-pip.py

Используйте конкретную версию pip для установки пакетов:

pip2.7 install mysql-connector-python --allow-external mysql-connector-python

Это работает для меня в Windows таким образом:

  1. Я изменил имя файлов python python.py и pythonw.exe на python3.py pythonw3.py

  2. Затем я просто запустил эту команду в командной строке:

    python3 -m pip install package

Другие ответы показывают, как использовать pip с 2.X и 3.X Python, но не показывают, как обрабатывать случай нескольких дистрибутивов Python (например, оригинальный Python и Anaconda Python).

У меня есть в общей сложности 3 версии Python: оригинальный Python 2.7 и Python 3.5 и Anaconda Python 3.5.

Вот как я устанавливаю пакет в:

  1. Оригинальный Python 3.5:

    /usr/bin/python3 -m pip install python-daemon
    
  2. Оригинальный Python 2.7:

    /usr/bin/python -m pip install python-daemon
    
  3. Анаконда Питон 3.5:

    python3 -m pip install python-daemon
    

    или же

    pip3 install python-daemon
    

    Проще, так как Anaconda переопределяет оригинальные двоичные файлы Python в пользовательской среде.

    Конечно, установка в Anaconda должна быть сделана с conda Команда, это всего лишь пример.


Также убедитесь, что pip установлен для этого конкретного питона. Возможно, вам придется вручную установить pip. Это работает в Ubuntu 16.04:

sudo apt-get install python-pip 

или же

sudo apt-get install python3-pip

Отсюда: https://docs.python.org/3/installing/

Вот как установить пакеты для разных версий, которые установлены одновременно linux, mac, posix:

python2   -m pip install SomePackage  # default Python 2
python2.7 -m pip install SomePackage  # specifically Python 2.7
python3   -m pip install SomePackage  # default Python 3
python3.4 -m pip install SomePackage  # specifically Python 3.4
python3.5 -m pip install SomePackage  # specifically Python 3.5
python3.6 -m pip install SomePackage  # specifically Python 3.6

В Windows используйте панель запуска Py Python в сочетании с ключом -m:

py -2   -m pip install SomePackage  # default Python 2
py -2.7 -m pip install SomePackage  # specifically Python 2.7
py -3   -m pip install SomePackage  # default Python 3
py -3.4 -m pip install SomePackage  # specifically Python 3.4

Недавно я сам столкнулся с этой проблемой и обнаружил, что у меня нет нужного пункта для Python 3, в моей системе Linux, в которой также есть Python 2.

Сначала вы должны убедиться, что у вас установлен pip для вашей версии Python:

Для Python 2:

sudo apt-get install python-pip

Для Python 3:

sudo apt-get install python3-pip

Затем, чтобы установить пакеты для одной версии Python или другой, просто используйте следующее для Python 2:

pip install <package>

или для Python 3:

pip3 install <package>

pip также является пакетом Python. Так что самый простой способ установить модули для конкретной версии Python будет ниже

 python2.7 /usr/bin/pip install foo

или же

python2.7 -m pip install foo

В Linux, Mac OS X и других системах POSIX используйте версионные команды Python в сочетании с -m переключиться на запуск соответствующей копии pip:

python2.7 -m pip install SomePackage
python3.4 -m pip install SomePackage

(также могут быть доступны соответствующие команды pip)

В Windows используйте py Python Launcher в сочетании с -m переключатель:

py -2.7 -m pip install SomePackage  # specifically Python 2.7
py -3.4 -m pip install SomePackage  # specifically Python 3.4

если вы получите ошибку для py -3.4 тогда попробуйте:

pip install SomePackage

Итак, по-видимому, существует несколько версий easy_install а также pip, Кажется, это большой беспорядок. Во всяком случае, это то, что я сделал, чтобы установить Django для Python 2.7 на Ubuntu 12.10:

$ sudo easy_install-2.7 pip
Searching for pip
Best match: pip 1.1
Adding pip 1.1 to easy-install.pth file
Installing pip-2.7 script to /usr/local/bin

Using /usr/lib/python2.7/dist-packages
Processing dependencies for pip
Finished processing dependencies for pip

$ sudo pip-2.7 install django
Downloading/unpacking django
  Downloading Django-1.5.1.tar.gz (8.0Mb): 8.0Mb downloaded
  Running setup.py egg_info for package django

    warning: no previously-included files matching '__pycache__' found under directory '*'
    warning: no previously-included files matching '*.py[co]' found under directory '*'
Installing collected packages: django
  Running setup.py install for django
    changing mode of build/scripts-2.7/django-admin.py from 644 to 755

    warning: no previously-included files matching '__pycache__' found under directory '*'
    warning: no previously-included files matching '*.py[co]' found under directory '*'
    changing mode of /usr/local/bin/django-admin.py to 755
Successfully installed django
Cleaning up...

$ python
Python 2.7.3 (default, Sep 26 2012, 21:51:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> 

Установка нескольких версий Python и соответствующих пакетов.

Версия Python на той же машине Windows: 2.7, 3.4 и 3.6

Установка всех 3 версий Python:

  • Установил Python 2.7, 3.4 и 3.6 с указанными ниже путями

PATH для всех 3 версий Python:

  • Убедитесь, что переменная PATH (в системных переменных) содержит следующие пути: C:\Python27\;C:\Python27\Scripts;C:\Python34\;C:\Python34\Scripts;C:\Python36\;C:\Python36\Scripts\;

Переименование исполняемых файлов для версий:

  • Изменено имя исполняемого файла python в C: \ Python36 и C: \ Python34 на python36 и python34 соответственно.

Проверено на наличие командной строки со всеми версиями:

Установка пакетов отдельно для каждой версии

Если у вас несколько версий, а также несколько архитектур (32-разрядная, 64-разрядная), вам нужно будет добавить -32 или -64 в конце вашей версии.

Для Windows перейдите в cmd и введите py --list, и он выдаст версии, которые вы установили. Список будет выглядеть следующим образом:

Installed Pythons found by py Launcher for Windows
 -3.7-64 *
 -3.7-32
 -3.6-32

Полная команда в качестве примера будет:

py -3.6-32 -m pip install (package)

Если вы хотите получить больше информации, чтобы установить определенную версию пакета на определенную версию python, используйте ==(версия) после пакета. В качестве примера,

py -3.6-32 -m pip install opencv-python==4.1.0.25

Вот мой взгляд на проблему. Работает на Python3. Основными функциями являются:

  • Каждая версия Python скомпилирована из исходного кода
  • Все версии установлены локально
  • Не портит установку Python по умолчанию в вашей системе.
  • Каждая версия Python изолирована с помощью virtualenv

Шаги следующие:

  1. Если у вас есть несколько дополнительных версий Python, установленных каким-либо другим способом, избавьтесь от них, например, удалите $HOME/.local/lib/python3.x и т. Д. (Также глобально установленные). Не трогайте версию Python3 по умолчанию вашей системы.

  2. Загрузите исходный код для различных версий Python в следующей структуре каталогов:

    $HOME/
        python_versions/ : download Python-*.tgz packages here and "tar xvf" them.  You'll get directories like this:
          Python-3.4.8/
          Python-3.6.5/
          Python-3.x.y/
          ...
    
  3. В каждом каталоге "Python-3.xy/" выполните следующее (НЕ используйте "sudo" ни на одном из шагов!):

    mkdir root
    ./configure --prefix=$PWD/root 
    make -j 2
    make install
    virtualenv --no-site-packages -p root/bin/python3.x env
    
  4. В "python_versions/" создайте файлы, подобные этому:

    env_python3x.bash:
    
    #!/bin/bash
    echo "type deactivate to exit"
    source $HOME/python_versions/Python-3.x.y/env/bin/activate
    
  5. Теперь, когда вы захотите выбрать python3.x, сделайте

    source $HOME/python_versions/env_python3x.bash
    

    войти в virtualenv

  6. Находясь в virtualenv, установите ваши любимые пакеты python с

    pip install --upgrade package_name
    
  7. Для выхода из версии virtualenv и python просто введите "деактивировать"

Для python 3 и ОС Windows я всегда использую этот синтаксис для установки пакетов в другой версии:

Сначала я всегда использую командную строку Git Bash.

Вот пример установки пакета urllib.

Версия Python по умолчанию: (Обычная команда pip)

      pip install urllib3

Для других версий

      py -3.8 -m pip install urllib3

py => для питона

-3.8 => для версии (я использую версию 3.8.7), но если вы используете версию 3.7.7, она будет «-3.7»

-m : просто потому или для изменения

pip install urllib3 : обычная команда pip

Вы можете использовать одну из следующих команд:

      pip2 install SomePackage
pip3 install SomePackage

      python2 -m pip install SomePackage  
python3 -m pip install SomePackage 

И, конечно же, убедитесь, что у вас установлена ​​правильная версия pip.

      sudo apt-get install python-pip
sudo apt-get install python3-pip

Я сам не использовал эти команды, но в некоторых ответах выше предлагается использовать их, чтобы указать именно ту версию python, которую вы хотите использовать.

      pip-2.7 install SomePackage
python-3.6 -m pip install SomePackage

Большинство ответов здесь касаются этой проблемы, но я хочу добавить кое-что, что постоянно смущало меня в отношении создания альтернативной установки python в /usr/local на CentOS 7. Когда я установил там, казалось, что pip работает, так как я мог использовать pip2.7 install и это будет устанавливать модули. Однако я не мог понять, почему моя недавно установленная версия python не видела того, что я устанавливал.

В CentOS 7 выясняется, что уже есть python2.7 и pip2.7 в /usr/bin папка. Чтобы установить pip для вашего нового дистрибутива python, вам нужно специально указать sudo перейти на /usr/local/bin

sudo /usr/local/bin/python2.7 -m ensurepip

Это должно установить pip2.7 в ваш /usr/local/bin папка вместе с вашей версией Python. Хитрость в том, что когда вы хотите установить модули, вам нужно либо изменить sudo $PATH переменная для включения /usr/local/bin или вам нужно выполнить

sudo /usr/local/bin/pip2.7 install <module>

если вы хотите установить новый модуль. Мне понадобилось навсегда, чтобы вспомнить, что sudo не сразу увидел /usr/local/bin,

Простой и свежий

На окнах

1- Предположим, что в вашей системе установлена ​​другая версия Python. Для проверки используйте следующую команду для проверки:

      > py --list
 -3.10-64 *
 -3.7-64

2- Установите предпочтительную версию по умолчанию:

  • установивPY_PYTHONпеременная окружения (например, PY_PYTHON=3.7).
  • установив файл py.ini, обычно расположенный наC:\Users\<your user name>\AppData\Localесли не создать. Например, установка переменных среды PY_PYTHON=3 и PY_PYTHON3=3.7 эквивалентна INI-файлу, содержащему:
      [defaults]
python=3
python3=3.7

3- проверьте, набрав еще разpy --list:

      > py --list
 -3.10-64 
 -3.7-64 *

4- Если вы хотите запустить виртуальную среду со специальной версией python и pip, см. этот пост .

В Linux (Убунту)

Простой подход к управлению различными версиями Python в Linux:update-alternativesкоманда. Эта команда дает нам возможность легко переключаться между многими версиями одного и того же программного обеспечения.

  • формат команды:update-alternatives --install link name path priority, имя — это общее имя для главной ссылки, ссылка — это имя ее символической ссылки, путь — это альтернатива, вводимая для главной ссылки, а приоритет — это приоритет группы альтернатив.
  • Использование: Предположим, вы установили две версии Python (python3.10, python3.7). Теперь, выполнив эту команду, вы свяжете имя команды (python3) с разными версиями python и назначите номер приоритета. Номер более высокого приоритета означает более высокий приоритет.
      $ update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 1
$ update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2
  • Список установленных версий python с помощью этой команды:
      $ update-alternatives --list python3
/usr/bin/python3.7
/usr/bin/python3.10

  • Переключение между версиями: просто вручную выберите номер приоритета нужной версии Python после выполнения следующей команды.
      $ update-alternatives --config python3

There are 2 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                      Priority   Status
------------------------------------------------------------
  0            /usr/bin/python3.10   2         auto mode
* 1            /usr/bin/python3.7   1         manual mode
  2            /usr/bin/python3.10   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 2

Например, если вы устанавливаете другие версии (например, 3.5) по умолчанию и хотите установить pip для python 2.7:

  1. загрузить pip по адресу https://pypi.python.org/pypi/pip (tar)
  2. распаковать файл tar
  3. перейдите в каталог файла
  4. sudo python2.7 setup.py установить

Обновление PIP и установка пакетов при использовании определенного местоположения pip:

Я получал периодическую ошибку «Доступ запрещен» при использовании простой командной строки.pip install <library>на некоторых лабораторных машинах, которые использовали pip изc:\users\...папка вместоc:\Program Files\Pythonпапка для всех пользователей. Благодаря приведенному выше ответу MultiplyByZer0 мне удалось реализовать решение, которое указывало путь к Python, а затем запускало pip.

Вот сценарий powershell, который я использую для принудительного обновления pip, а затем установки библиотек Python:

      $fullPath = "C:\Program Files\Python38"
$thisApp = "python.exe"
$arguments = "-m pip install --upgrade pip"
$appPath = join-path $fullPath $thisApp
Start-Process $appPath $arguments  -Verb RunAs -Wait
$packages = @(  "pylint"
                "pillow"
                "pygame"
                "matplotlib"
                "pandas"
                "godirect")
foreach ($package in $packages)
   {
       Write-Host "Installing python Package" $package -ForegroundColor Yellow
       $arguments = "-m pip install $package"
       Start-Process $appPath $arguments  -Verb RunAs -Wait
   }

Другой возможный способ - использовать conda и pip. Когда-нибудь вы, вероятно, захотите использовать только один из них, но если вам действительно нужно настроить конкретную версию python, я объединяю оба.

  1. Я создаю начальную среду conda с нужным мне питоном. Как здесь https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html. В качестве альтернативы вы можете настроить всю среду, просто используя conda.

    conda create -n myenv python=3.6.4

  2. Затем активируйте свою среду с помощью питона, который вам нравится. Эта команда может изменяться в зависимости от ОС.

    source activae myenv

  3. Теперь у вас активен питон, и вы можете продолжать использовать conda, но если вам нужно / вы хотите использовать pip:

    python -m pip -r requirements.txt

Вот вам и возможный путь.

Обновлено в соответствии с последней версией Ubuntu-LTS 22.04 и для Python 3, однако аналогичные инструкции можно выполнить и для Python 2 с соответствующими изменениями версии.

Вы можете рассмотреть менеджер среды Python pyenv, который позволяет параллельно настраивать различные версии Python без необходимости создания отдельного виртуального окружения или установки отдельного pip.

Инструкции по установке можно найти здесь, и настроить pyenv довольно легко. https://github.com/pyenv/pyenv#readme

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

Системы на базе Redhat

      sudo yum install git gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel make curl llvm

Linux-системы на базе Ubuntu/Debian

      sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev 
 libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git

После установки необходимых компонентов следуйте инструкциям в README.md. После завершения установки, чтобы проверить версии Python, имеющиеся в вашей системе, выполните в своем терминале следующую команду:

      pyenv versions

Обратите внимание, что если вы установили версии Python перед настройкой pyenv, он может не обнаружить установленные версии, и вам, возможно, придется удалить их, включая зависимости. Позаботьтесь о том, чтобы при этом не удалить важные файлы lib.

Чтобы установить новую версию Python

      pyenv install <version_number> # like 3.9 for installing python3.9

После установки, чтобы установить версию Python по умолчанию, выполните следующее.

      pyenv global <version_number> # to set it globally
pyenv local <version_number> # to set it in the local directory

Вы можете переключаться между установленными версиями Python в любое время с помощьюpyenv global,pyenv local, илиpyenv shellкоманды с желаемым номером версии.

Обратите внимание, что этот механизм отличается от виртуальной среды, поскольку он позволяет вам управлять несколькими версиями Python на общесистемном уровне, используя при этом другие библиотеки и пакеты системного уровня. Однако у pyenv есть плагины для включения поддержки virtualenv, которые можно установить, следуя инструкциям, перечисленным здесь https://github.com/pyenv/pyenv-virtualenv#readme .

Pyenv можно удалить, просто удалив папку pyenv и отменив все изменения, внесенные в нее..bashrc,.bash_profileи/или подобные файлы.

Надеюсь это поможет.

Контекст: Archlinux

Действие:
Установите python2-pip:
sudo pacman -S python2-pip

Теперь у вас есть pip2.7:
sudo pip2.7 install boto

Тест (в моем случае мне нужно было "boto"):
Запустите следующие команды:

python2
import boto

Успех: без ошибок.

Выход: Ctrl+D

Просто вы можете попробовать это

sudo apt-get install python3-pip
sudo pip3 install MODULE_NAME

Вот подробный ответ.

Вы можете перейти, например, к C:\Python2.7\Scripts, а затем запустить cmd по этому пути. После этого вы можете запустить pip2.7 установить ваш пакет...

Это установит пакет для этой версии Python.

Это, вероятно, совершенно неправильная вещь (я нуб питона), но я просто вошел и отредактировал файл пипса.

#!/usr/bin/env python3 <-- I changed this line.

# -*- coding: utf-8 -*-
import re
import sys

from pip._internal import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

Для Blender:

/usr/bin $ python3.7 -m pip install irc

Если у вас есть оба python3.6 а также python3.7 установлен и хочу использовать pip с участием python3.7 по умолчанию вам следует сделать следующее:

Сначала убедитесь, что у вас есть pip установлен для python3.7

python3.7 -m pip install -U pip

Сейчас же pip3.7 должен быть доступен, поэтому мы редактируем .bashrc

nano ~/.bashrc

добавив к нему следующую строку

alias pip=pip3.7

Чтобы изменения вступили в силу, введите в оболочке:

source ~/.bashrc

Теперь, если вы наберете:

pip --version

вы должны получить:

pip 20.1.1 из /usr/local/lib/python3.7/dist-packages/pip (python 3.7)

что означает, если вы используете, например:

pip install <package>

он установит <package> за python3.7

Чтобы использовать несколько версий pip, просто введите

pip{версия} и запустить команду

Пример: для питона 3.10

пункт 3.10

список pip3.10

пункт 3.10

для Питона 3.7

пункт 3.7

список pip3.7

Некоторая полезная информация для отладки этоpip debugкоманда. Он показывает расположение интерпретатора Python, к которому он подключен, в 1-й строке (после предупреждения).

      $ pip debug
WARNING: This command is only meant for debugging. Do not use this with automation for parsing and getting these details, since the output and options of this command may change without notice.
pip version: pip 21.2.4 from /data/akshay/anaconda3/lib/python3.9/site-packages/pip (python 3.9)
sys.version: 3.9.12 (main, Apr  5 2022, 06:56:58)
sys.executable: /data/akshay/anaconda3/bin/python 
Другие вопросы по тегам