Как изменить версию Python по умолчанию (бинарную) в jail FreeBSD?

Вопрос или проблема

В контейнере я установил python3.6 вместе с python3.4. Оба были установлены с помощью pkg install, без портов. Я хочу оставить версию 3.4 на некоторое время, но установить 3.6 как версию по умолчанию.

Ответы, найденные в интернете, такие как этот или этот, либо предполагают создание ссылки /usr/local/bin/python на python3.6 (что нужно будет делать снова после любого обновления python по умолчанию, чего я хочу избежать; плюс такой ссылки все равно нет); либо установку DEFAULT_VERSIONS в /etc/make.conf, что не влияет на установку бинарников (я попробовал, тем не менее).

Более того, виртуальное окружение не является вариантом, так как я хочу запустить uwsgi, который требует, чтобы системный python по умолчанию соответствовал тому, что в виртуальном окружении python приложения, которое он “мониторит” (в моем случае, Django), для корректного старта. Даже если я запускаю из виртуального окружения Django (предоставляя python3.6), uwsgi обнаруживает python3.4 как версию python по умолчанию.

Также не могу найти, отсутствует ли какая-либо переменная окружения.

Для информации, внутри контейнера (и виртуального окружения):

# printenv 
USER=root
LOGNAME=root
HOME=/root
SHELL=/bin/csh
BLOCKSIZE=K
MAIL=/var/mail/root
PATH=/usr/local/venv/dj1/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin
TERM=xterm-256color
HOSTTYPE=FreeBSD
VENDOR=amd
OSTYPE=FreeBSD
MACHTYPE=x86_64
SHLVL=1
PWD=/var/log
GROUP=wheel
HOST=dev_web0
EDITOR=vi
LANG=fr_FR.UTF-8
MM_CHARSET=UTF-8
PAGER=more
VIRTUAL_ENV=/usr/local/venv/dj1

Все бинарные файлы были предварительно собраны с настройками по умолчанию, и текущий python по умолчанию — 3.6.

Чтобы достичь своей цели, вы можете установить желаемую версию Python как бинарный файл, а затем установить ее в DEFAULT_VERSIONS в /etc/make.conf и затем установить uwsgi из портов, используя эту версию. Я выполняю эту процедуру автоматизированным образом с Python3.7, который не является версией по умолчанию на данный момент.

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

Ответ или решение

Изменение стандартной (бинарной) версии Python в FreeBSD jail может быть нетривиальной задачей, особенно если вы хотите, чтобы новая версия совпадала с системной версией, используемой приложением, таким как uWSGI. Ваша ситуация предполагает установку Python 3.6 и 3.4, где 3.4 пока еще требуется, но 3.6 вы хотите сделать стандартной. Давайте рассмотрим несколько подходов к решению этой задачи.

1. Настройка через /etc/make.conf

Первый способ — это настройка файла конфигурации /etc/make.conf, где можно установить желаемую версию Python по умолчанию. Однако данный подход работает только при установке пакетов через порты. Если вы хотите установить uWSGI с использованием вашей версии Python 3.6, вам следует убедиться, что строка DEFAULT_VERSIONS в файле /etc/make.conf включает "python=3.6".

# Откройте файл конфигурации make.conf
ee /etc/make.conf

# Добавьте или измените следующую строку
DEFAULT_VERSIONS=python=3.6

После этого установите uWSGI:

cd /usr/ports/www/uwsgi
make install clean

Это позволит uWSGI использовать Python 3.6 как стандартный.

2. Создание символьной ссылки

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

ln -sf /usr/local/bin/python3.6 /usr/local/bin/python

Этот метод позволяет указать именно ту версию Python, которую вы хотите использовать по умолчанию. Запомните, что это придется повторять после обновления системы или пакетов.

3. Переменные окружения

Убедитесь, что переменные окружения настроены должным образом. Для корректной работы uWSGI возможно потребуется указать переменные окружения, которые будут использоваться при его запуске. Это можно сделать в конфигурационном файле uWSGI:

[uwsgi]
pythonpath = /path/to/your/django/project
home = /usr/local/venv/dj1
module = myproject.wsgi:application

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

4. Проверка и тестирование

Обратите внимание, что необходимо протестировать ваше приложение под новой версией Python. Убедитесь, что все зависимости вашей среды (например, библиотеки Django и другие) совместимы с Python 3.6. Запускайте тесты и проверяйте логи на наличие ошибок.

Заключение

Ваша цель состоит в том, чтобы установить Python 3.6 как версию по умолчанию в окружении jail FreeBSD, не теряя при этом совместимость с текущими установками. Использование файла конфигурации /etc/make.conf в сочетании с установкой через порты является наиболее контролируемым методом, однако, если это не принесет результатов, создание символьной ссылки является временным, но быстрым решением. Не забудьте тщательно тестировать ваше приложение, чтобы избежать совместимости и обеспечить его корректную работу.

Оцените материал
Добавить комментарий

Капча загружается...