【问题标题】:Python script in systemd: virtual environment or real environmentsystemd 中的 Python 脚本:虚拟环境或真实环境
【发布时间】:2020-03-31 20:12:36
【问题描述】:
【问题讨论】:
标签:
python
virtualenv
systemd
【解决方案1】:
使用虚拟环境。我看不出有什么理由不这样做。在某些时候,您可能希望在该系统上同时运行多个 Python 应用程序,这些应用程序可能需要相同依赖项的不同版本,然后您将回到原点,所以...使用虚拟环境。
在配置 systemd、crontab 或其他任何内容时,请确保使用位于虚拟环境的 bin 目录中的 python 二进制文件,以便不需要激活虚拟环境:
/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
【解决方案2】:
systemd 将尝试在启动时运行您的脚本,因此您的虚拟环境还没有被激活。您可以(也许)通过告诉 systemd 使用 virtualenv 的 bin 中的 python 和适当的环境变量来避免这个问题。或者,您可以将 activate 作为该脚本在 systemd 中启动的预运行步骤。也许吧。
但总的来说,我会让 systemd 和您的操作系统变得容易,而忽略 virtualenv 绝对主义者。让脚本在你的开发机器上运行,使用你想要的 virtualenv,然后准备 systemd 以使用全局 python,并安装合适的包。对于不必使用 systemd 的脚本,您始终可以在该 pi 上使用 virtualenvs。 Systemd 并不总是有最清晰的错误消息。
(如果您需要导入自定义模块,您可以在脚本中将目录注入sys.path。这甚至可以完全避免安装包,对于全局 Python。)
这个答案肯定是基于意见的。