Как мне запустить несколько питонов с virtualenv в производстве?
Я установил virtualenv для запуска другой версии Python, нежели системный Python для моего приложения django. Я установил Python 2.7.11, используя метод, описанный здесь. Я изменил свой файл uwsgi.ini, чтобы использовать virtualenv. Когда я перезапускаю nginx и uwsgi, я получаю следующую ошибку в моем журнале uwsgi:
ImportError: /home/me/python2711/lib/python2.7/lib-dynload/_io.so: undefined symbol: PyUnicodeUCS2_Replace
unable to load app 0 (mountpoint='') (callable not found or import error)
Из другого чтения, которое я сделал (см. Здесь для одного примера), кажется, что проблема связана с конфликтом двух разных версий Python друг с другом, что, как я думал, призвано решить virtualenv.
У меня вопрос: что мне нужно изменить в моей конфигурации / установках, чтобы мое приложение django работало на Python 2.7.11, а не на системной установке 2.7.3?
РЕДАКТИРОВАТЬ
Чтобы поговорить с комментарием @TheBrownOne ниже, я установил последнюю версию из исходного кода локально по адресу /usr/local/lib/python2.7.11
и указал, что в качестве версии Python для моего virtualenv с
virtualenv python2711 --python=/usr/local/lib/python2.7.11/bin/python
как часть моей оригинальной дорожной карты. Это все еще приводит к этой ошибке.
1 ответ
virtualenv
предназначен для управления зависимостями пакетов Python, а не версии самого Python. Если вы хотите иметь конкретные версии самого Python, вероятно, было бы полезно взглянуть на контейнеры Docker. Контейнеры Docker способны на то, что вы описываете.
В качестве альтернативы вы можете установить версию Python 2.7.11 где-нибудь локально:
wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
tar -zxvf Python-2.7.11.tgz
cd Python-2.7.11
mkdir ~/.localpy
./configure prefix=/home/$USER/.localpy
make
make install
Затем измените ваш virtualenv, чтобы включить -p /home/$USER/.localpy/bin/python2.7