Как правильно управлять несколькими версиями Python?
21
У меня есть машина с Python 2.6, установленным в качестве Python по умолчанию. Затем я установил Python 2.7 и вручную создал / usr / bin / python как символическую ссылку на новую установку.
Изменение Python по умолчанию (или Perl и т. Д.) В ОС - это действительно плохая идея. Этот интерпретатор на самом деле является частью ОС, и вполне могут быть и другие компоненты ОС, написанные специально для работы с этой версией интерпретатора.
Например, в Redhat инструмент yum, который выполняет обновления системного программного обеспечения, представляет собой приложение python. Вы действительно не хотите сломать это. Такие приложения могут зависеть от конкретных, возможно, нестандартных устанавливаемых модулей Python, которых может не иметь установленная версия. Например, в Ubuntu я полагаю, что некоторые встроенные инструменты ОС, написанные на Python, используют ORM под названием Storm, который не является частью стандартной библиотеки Python. Ваша чистая установка Python 2.7 имеет определенную ожидаемую версию установленного модуля Storm? Есть ли у него версия Storm? Нет? Тогда вы только что разбили кусок своей ОС.
Правильный способ сделать это - установить предпочитаемую версию python и настроить свою учетную запись пользователя, чтобы использовать ее, указав свой .bash_profile, путь и так далее. Вы также можете заглянуть в модуль virtualenv для Python.
Погуглил мой путь сюда. Был бы -1, если бы у меня был представитель в этом стеке. Почему? Поскольку предлагаемый подход говорит только «установите предпочитаемую версию Python». Как это сделать без использования системного питона?
Jez
@jez Пользователи должны обратиться к инструкциям по установке для своего приложения и выбранной комбинации ОС. В общем случае языковые установочные пакеты будут устанавливаться в безопасном месте, а не перезаписывать основные компоненты ОС, поэтому перезапись версии ОС будет особым случаем.
Саймон Хиббс
8
Как мне исправить этот беспорядок?
Ничего больше, чем переустановка python. Это отменит ваше изменение (символическая ссылка).
Почему вы хотите по умолчанию? Каждый раз, когда вам это нужно, просто используйте python2.7или включите #!/usr/bin/python2.7(шебанг) в начале ваших (исполняемых) скриптов.
Если вы настаиваете на python2.7использовании общесистемного значения по умолчанию, используйте более позднюю версию Ubuntu (в настоящее время это Ubuntu 11.04 под кодовым названием Natty). Эта версия используется по умолчанию.
В будущем избегайте ручных вмешательств, таких как то, что вы делали с символической ссылкой. Это особенно верно для файлов, управляемых дистрибутивами, и особенно для сложных животных, таких как Python.
Я подумал, что разумно изменить установку Python по умолчанию после обновления. Я хочу это по умолчанию, потому что я хочу работать с более новым питоном ... по умолчанию. Когда я печатаю pythonиз bash, я хочу получить новый питон. Есть ли лучший способ сделать это, чем я?
ripper234
Просто заметьте - я не думаю, что в установке Python 2.7 было что-то не так. Единственным «неортодоксальным» шагом было изменение символической ссылки, которая, как я думал, была правильным способом установить ее по умолчанию. Есть ли способ лучше?
ripper234
2
@ripper: Я думаю, что я приду к этой теме немного поздно. Как говорит Tshepang, pythonпакет в Ubuntu определяет версию системы. Теперь можно настроить вашу установку так, чтобы Python 2.7 был по умолчанию, создав собственный пакет Python и т. Д., Но если это так, вы фактически станете сопровождающим вашей установки Python вместо Ubuntu, и вам придется узнать, как Python управляется в Debian / Ubuntu. Имейте в виду, что другие пакеты Python в системе настроены для работы с 2.6 по умолчанию, поэтому, кроме всего прочего, может произойти поломка.
Фахим Митха
1
@Tshepang: Хорошее резюме!
Фахим Митха
12
@ ripper234: Ничего не меняйте /usr/bin, это зарезервировано для вашего дистрибутива. Вместо этого сделайте /usr/local/bin/pythonсимволическую ссылку на python2.7. Тогда скрипты, использующие #!/usr/bin/env python(рекомендуемая идиома), а также набрав pythonв командной строке, запустят Python 2.7. Скрипты из дистрибутива, которые хотят Python от дистрибутива, могут продолжать вызывать #!/usr/bin/python.
Жиль "ТАК - перестань быть злым"
2
Отказ от ответственности: я только что опубликовал этот же ответ на переполнение стека:
Вот мой взгляд на проблему. Работает на Python3. Основными функциями являются:
Каждая версия Python скомпилирована из исходного кода
Все версии установлены локально
Никоим образом не портит установку Python по умолчанию в вашей системе.
Каждая версия Python изолирована с помощью virtualenv
Шаги следующие:
Если у вас есть несколько дополнительных версий Python, установленных каким-либо другим способом, избавьтесь от них, например, удалите $ HOME / .local / lib / python3.x и т. Д. (Также глобально установленные). Не трогайте версию Python3 по умолчанию вашей системы.
Загрузите исходный код для различных версий 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/
...
В каждом каталоге «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
В "python_versions /" создайте файлы вроде этого:
env_python3x.bash:#!/bin/bash
echo "type deactivate to exit"
source $HOME/python_versions/Python-3.x.y/env/bin/activate
Теперь, когда вы захотите выбрать python3.x, сделайте
source $HOME/python_versions/env_python3x.bash
войти в virtualenv
Находясь в virtualenv, установите ваши любимые пакеты python с
pip install --upgrade package_name
Для выхода из версии virtualenv и python просто введите «деактивировать»
Мы поместили несколько дистрибутивов Python для Mac и Ubuntu, и вот моя рекомендация.
Оставьте системный питон безмолвным: никогда не используйте его.
Если вам нужен только один основной дистрибутив Python, скачайте и установите Canopy с enthought. Когда он установится, выберите «установить как мой системный питон», и затем вы сможете установить пакеты из диспетчера пакетов Canopy.
Canopy также совместим из коробки с pipкомандой менеджера пакетов PyPi, которая позволяет вам устанавливать пакеты (например pip install python-twitter)
Если вы планируете использовать виртуальные среды (т.е. вы разрабатываете программы на Python и хотите, чтобы для каждой из них была выделенная чистая среда Python с простым средством переключения между ними), я бы рекомендовал Anaconda поверх Canopy из-за инструмента управления виртуальной средой . Это позволит вам
# Increase the chances that the build will have all dependencies.# https://github.com/pyenv/pyenv/wiki/Common-build-problems
sudo apt build-dep python3
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 python-openssl git
# Build and install a Python version from source.
pyenv install 3.8.0
Список доступных версий Python:
pyenv versions
Теперь у нас есть:
* system (set by /home/cirsan01/.pyenv/version)3.8.0
Ничего больше, чем переустановка
python
. Это отменит ваше изменение (символическая ссылка).Почему вы хотите по умолчанию? Каждый раз, когда вам это нужно, просто используйте
python2.7
или включите#!/usr/bin/python2.7
(шебанг) в начале ваших (исполняемых) скриптов.Если вы настаиваете на
python2.7
использовании общесистемного значения по умолчанию, используйте более позднюю версию Ubuntu (в настоящее время это Ubuntu 11.04 под кодовым названием Natty). Эта версия используется по умолчанию.В будущем избегайте ручных вмешательств, таких как то, что вы делали с символической ссылкой. Это особенно верно для файлов, управляемых дистрибутивами, и особенно для сложных животных, таких как Python.
источник
python
из bash, я хочу получить новый питон. Есть ли лучший способ сделать это, чем я?python
пакет в Ubuntu определяет версию системы. Теперь можно настроить вашу установку так, чтобы Python 2.7 был по умолчанию, создав собственный пакет Python и т. Д., Но если это так, вы фактически станете сопровождающим вашей установки Python вместо Ubuntu, и вам придется узнать, как Python управляется в Debian / Ubuntu. Имейте в виду, что другие пакеты Python в системе настроены для работы с 2.6 по умолчанию, поэтому, кроме всего прочего, может произойти поломка./usr/bin
, это зарезервировано для вашего дистрибутива. Вместо этого сделайте/usr/local/bin/python
символическую ссылку наpython2.7
. Тогда скрипты, использующие#!/usr/bin/env python
(рекомендуемая идиома), а также набравpython
в командной строке, запустят Python 2.7. Скрипты из дистрибутива, которые хотят Python от дистрибутива, могут продолжать вызывать#!/usr/bin/python
.Отказ от ответственности: я только что опубликовал этот же ответ на переполнение стека:
/programming/2812520/pip-dealing-with-multiple-python-versions/50319252
Вот мой взгляд на проблему. Работает на Python3. Основными функциями являются:
Шаги следующие:
Если у вас есть несколько дополнительных версий Python, установленных каким-либо другим способом, избавьтесь от них, например, удалите $ HOME / .local / lib / python3.x и т. Д. (Также глобально установленные). Не трогайте версию Python3 по умолчанию вашей системы.
Загрузите исходный код для различных версий Python в следующей структуре каталогов:
В каждом каталоге «Python-3.xy /» выполните следующее ( НЕ используйте «sudo» ни на одном из шагов!):
В "python_versions /" создайте файлы вроде этого:
Теперь, когда вы захотите выбрать python3.x, сделайте
войти в virtualenv
Находясь в virtualenv, установите ваши любимые пакеты python с
Для выхода из версии virtualenv и python просто введите «деактивировать»
источник
Мы поместили несколько дистрибутивов Python для Mac и Ubuntu, и вот моя рекомендация.
Оставьте системный питон безмолвным: никогда не используйте его.
Если вам нужен только один основной дистрибутив Python, скачайте и установите Canopy с enthought. Когда он установится, выберите «установить как мой системный питон», и затем вы сможете установить пакеты из диспетчера пакетов Canopy.
pip
командой менеджера пакетов PyPi, которая позволяет вам устанавливать пакеты (напримерpip install python-twitter
)источник
pyenv
https://github.com/pyenv/pyenv
Pyenv позволяет вам управлять несколькими версиями Python без sudo для одного пользователя, так же, как Node.js NVM и Ruby RVM .
Установите Pyenv:
Затем добавьте в свой
.bashrc
:Найдите версию Python для установки:
Установите нужную версию Python:
Список доступных версий Python:
Теперь у нас есть:
Выберите другую версию Python:
Оба вывода:
Теперь мы можем приступить к установке и использованию пакетов в обычном режиме:
Мы можем подтвердить, что все локально установлено в нашем чистом окружении с помощью:
За использование проекта
В предыдущем разделе мы увидели, как использовать pyenv в глобальной настройке.
Однако, как правило, вам нужно установить конкретную версию Python и пакета для каждого проекта. Вот как это сделать.
Сначала установите желаемую версию Python, как и раньше.
Затем из каталога вашего проекта установите желаемую версию Python с помощью:
который создает файл
.python-version
содержащий строку версии.А теперь давайте установим пакет локально только для нашего проекта: TODO: нет хорошего способа, которым это кажется: /programming/30407446/pyenv-choose-virtualenv-directory/59267972#59267972
Теперь, когда кто-то хочет использовать ваш проект, он будет делать:
который устанавливает правильную версию Python.
Связанные темы:
Проверено на Ubuntu 18.04, pyenv 1.2.15.
источник