Подтвердить что ты не робот

"Правильный способ" управлять несколькими версиями Python на archlinux

Итак, я прочитал это - https://wiki.archlinux.org/index.php/Python

И из этой вики ясно, что я могу установить Python 2.7.2 через

pacman -S python2

Мне разумно создать символическую ссылку на python2

ln -s python2 /usr/bin/python

Если я не буду переходить на python 3.0 в ближайшее время? Или есть лучший способ управления несколькими версиями python, такими как то, что я обычно использую в дебианской системе (update-alternatives --config python) или в системе mac os x (выбор python)?

ПОДТВЕРЖДЕНИЕ:

  • То, что я пытаюсь выяснить, - что такое "лучшая практика" управления различными версиями python в системе archlinux?
  • Я новичок в archlinux, но знаком с ubuntu, debian и mac os x
4b9b3361

Ответ 1

В большинстве стилей уже есть /usr/bin/python. Перезаписывание этой проблемы - плохая идея, так как это версия Python, используемая всеми пакетами в системе, и изменение того, что их можно сломать. При установке пакета Python 2.7 исполняемый файл должен быть установлен как /usr/bin/python 2.7 (если бы я не требовал, чтобы Archlinux был сломан), и лучше использовать его, если вы хотите запустить Python 2.7.

Archlinux является немного особенным, так как он будет использовать /usr/bin/python для Python 3, несмотря на то, что исполняемое имя по умолчанию для Python 3 является /usr/bin/python 3. Это запутанно и может рассматриваться как ошибка, но это означает, что вы не можете использовать эту символическую ссылку для Python 2, поскольку любой другой Archlinux script, который использует Python 3, почти наверняка сломается, если вы это сделаете.

Итак, где в других Unix, symlinking/usr/bin/python для Python 2.7 - плохая идея, на Archlinux это ужасная идея. Вместо этого просто установите всю необходимую вам версию и вызовите их/usr/bin/pythonX.X.

Ответ 2

Я бы сказал, вы не должны создавать какие-либо символические ссылки, подобные этому вообще. Особенно, если вы собираетесь распространять часть своего кода на Python, вы не должны предполагать, что у пользователя есть python2 или python3 в /usr/bin/python.

Если ваш script требует python2, просто используйте:

#!/usr/bin/env python2

Если ваш script требует python3, используйте:

#!/usr/bin/env python3

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

Ответ 3

В github есть хороший проект, который поможет вам с ним pyenv Что помогает вам управлять несколькими экземплярами python.

Ответ 4

Как говорили другие, короткий ответ: "Не делайте этого, скорее всего, сломаете вещи в своей системе", однако, если вы в основном используете Python 2, вы все равно можете установить свой личный дефолт в своей оболочке (и все еще есть возможность переключиться на Python 3 в любое время). Для этого сначала войдите в root и установите python2-virtualenv:

# pacman -S python2-virtualenv

Затем создайте виртуальную среду, в которой используется Python 2 (это автоматически установит Python, setuptools, wheel и pip в среде):

$ virtualenv -p /usr/bin/python2 --system-site-packages ~/env # (Or wherever you want your environment to live)

Если вы хотите использовать локально установленные пакеты (например, пакеты, которые вы устанавливаете с помощью pip, а не те, которые установлены pacman), удалите параметр --system-site-packages при создании вашей среды.

Теперь в вашем ~/.bash_profile или ~/.profile (или любом другом вашем предпочтительном файле конфигурации оболочки) установите следующее:\

source ~/env/bin/activate

Это приведет к активации виртуальной среды, сделав вашу версию Python 2 по умолчанию.

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

deactivate

или просто запустить Python 3 вручную.

Ответ 5

Нет, нет лучшего способа сделать это. Символьная ссылка python является частью пакета Python 3.

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

Ответ 6

Я просто наткнулся на этот пост, не было никаких некропов, но мне было интересно, что никто не упоминает virtualenvs. Я также использую ArchLinux, и я использую пакеты python virtualenv и virtualenvwrapper для создания нескольких сред python. Вы можете ссылаться на двоичные файлы python 2 или python3 в/usr/bin/для определения версии python, используемой в виртуальной среде.

Преимущество заключается в том, что пакеты, установленные в виртуальной среде, не конфликтуют с используемым системой python и есть много способов автоматизации обработки проектов.