Как использовать пользовательский pipenv через systemd? Python устанавливается через SCL

На сервере CentOS 7 я установил Python 3.6 через SCL. ( https://www.softwarecollections.org/en/scls/rhscl/rh-python36/)

У меня есть эта строка в.bashrc для включения Python 3.6 SCL

source scl_source enable rh-python36

Я установил pipenv:

pip install --user pipenv

Я запускаю программы на Python из командной строки:

pipenv run python myprogram.py

Все это прекрасно работает. У меня есть приложение Flask, которое использует pipenv пользователя. Я пытаюсь создать системный файл systemd для запуска / остановки / перезагрузки веб-приложения Flask. Как я могу получить файл модуля sytemd для использования pipenv пользователя, установленного через Python и pip SCL?

Я попытался выполнить командную строку от root, и я получаю эту ошибку:

[root@localhost ~]# source scl_source enable rh-python36
[root@localhost ~]# /home/user/.local/bin/pipenv run python /home/user/hello.py 
Traceback (most recent call last):
  File "/home/user/.local/bin/pipenv", line 7, in <module>
    from pipenv import cli
ModuleNotFoundError: No module named 'pipenv'

Однако я могу выполнить команду с помощью su -c, загрузив пользовательскую оболочку bash:

 su -c 'bash -lc /home/user/.local/bin/pipenv run python hello.py' user

Но эта линия кажется неловкой. Какую правильную строку я могу использовать в строке ExecStart файла systemd? Какие переменные среды должны быть включены для использования pipenv пользователя?

1 ответ

Вот мой рабочий файл systemd:

[Unit]
Description=Python app
# Requirements
Requires=network.target
# Dependency ordering
After=network.target

[Service]
# Let processes take awhile to start up
TimeoutStartSec=0
RestartSec=10
Restart=always
Environment="APP_SITE_SETTINGS=/home/app/.config/settings.cfg"
Environment="PYTHONPATH=/home/app/.local/lib/python3.6/site-packages"
WorkingDirectory=/home/app/app-site

User=app
Group=app
PermissionsStartOnly=true

KillSignal=SIGQUIT
Type=notify
NotifyAccess=all

# Main process
ExecStartPre=/bin/mkdir -p /run/app
ExecStartPre=/bin/chown app:app /run/app
#ExecStartPre=source scl_source enable rh-python36
ExecStart=/usr/bin/scl enable rh-python36 -- /home/app/.local/bin/pipenv run uwsgi \
  --socket 127.0.0.1:6003 \
  --buffer-size 65535 \
  --enable-threads \
  --single-interpreter \
  --threads 1 \
  -L \
  --stats /run/app/uwsgi_stats.socket \
  --lazy-apps \
  --master-fifo /run/stocks/uwsgimasterfifo \
  --processes 1 \
  --harakiri 960 \
  --max-worker-lifetime=21600 \
  --ignore-sigpipe \
  --ignore-write-errors \
  --disable-write-exception \
  --mount /=run:app \
  --manage-script-name

[Install]
WantedBy=multi-user.target
Другие вопросы по тегам