Сейчас я использую virtualenv
для своих приложений, развернутых на производстве.Полностью изолированная среда Python
Я бегу мои приложения как
cd $PROJECT_DIR
venv/bin/gunicorn -c gunicorn.conf.py my_app.wsgi:application
или
cd $PROJECT_DIR
venv/bin/celery worker --app=my_app.celery_tasks
Недавно мы перешли на Python 3. Самый последний Python 3.6 не был доступен для Ubuntu 14.04, поэтому я скомпилировал сам. Компиляция также позволяет мне использовать оптимизацию с использованием ./configure --enable-optimizations
.
Итак, я думаю о том, чтобы всегда составлять Python самостоятельно в своих развертываниях. Но в то же время сохраняя структуру файла virtualenv
, так что команды, которые я использую для запуска приложений в моей виртуальной среде, останутся прежними.
Я видел людей, рекомендуя используя pyenv
, но то, что я не люблю об этом является то, что он хранит сам Python в ~/.penv
и, судя по всему, мне нужно возиться с PATH
переменных окружения, чтобы мои команды работают в Cron и скрипты оболочки, которые мне не нравятся. Я хотел бы сохранить всю среду в одном каталоге, если это возможно.
Итак, мой вопрос: могу ли я каким-то образом скомпилировать Python в каталог venv
в моем каталоге проектов, чтобы структура каталогов была такой же, как при использовании virtualenv
? Как:
$PROJECT_DIR/
my_app/
venv/
bin/
python
python3.6
celery
gunicorn
...
lib/
python3.6/
site-packages/
celery/
gunicorn/
...
AFAIK вы не можете сделать это. Если вы хотите такую изоляцию, используйте Docker. – yedpodtrzitko
Я вполне уверен, что это возможно. И не сложно. Просто нужно понять. – warvariuc