Python скрипт в systemd: виртуальная среда или реальная среда - PullRequest
0 голосов
/ 31 марта 2020

Я пытался запустить скрипт python при запуске (на Pi). Сначала я делал это с помощью скрипта. sh, запускаемого cron.

При публикации с проблемой на StackExchange Pi (https://raspberrypi.stackexchange.com/questions/110868/parts-of-code-not-running-when-autostarting-script-in-crontab) предлагается использовать systemd.

Человек, помогающий мне в этом, предложил не использовать виртуальную среду при выполнении сценария Python (они отмечают свое ограниченное знакомство с Python) и вместо этого использовать реальную среду. Но другие ресурсы настоятельно рекомендуют использовать виртуальную среду (например, https://docs.python.org/3/tutorial/venv.html).

В надежде на правильную настройку кто-нибудь может взвесить правильный подход?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

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

При настройке systemd , crontab или чего-либо другого, обязательно используйте двоичный файл python, который находится в каталоге bin виртуальной среды, так что нет необходимости активировать виртуальную среду:

/path/to/venv/bin/python -m my_executable_module
/path/to/venv/bin/python /path/to/my_script.py
/path/to/venv/bin/my_executable_script
0 голосов
/ 31 марта 2020

systemd попытается запустить ваш скрипт при запуске, чтобы ваша виртуальная среда еще не была активирована. Вы можете (возможно) избежать этой проблемы, сказав systemd использовать python в корзине virtualenv с соответствующими переменными окружения. Или вы можете активировать как предварительный шаг для запуска этого скрипта в systemd. Возможно.

Но в целом я бы упростил systemd и вашу ОС и проигнорировал бы виртуозных абсолютистов. Заставьте скрипт работать на вашем компьютере, используя virtualenv, сколько хотите, но затем подготовьте systemd для использования глобального python с установленными подходящими пакетами. Вы всегда можете использовать virtualenvs на этом пи для сценариев, которые не должны работать с systemd. Systemd не всегда имеет четкие сообщения об ошибках.

Этот ответ, безусловно, основан на мнении.

...