首页 > 解决方案 > systemd 中的 Python 脚本:虚拟环境或真实环境

问题描述

我一直在尝试在启动时(在 Pi 上)运行 python 脚本。我最初是通过 cron 触发的 .sh 脚本执行此操作的。

在 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)。

希望正确设置它的任何人都可以权衡正确的方法吗?

标签: pythonvirtualenvsystemd

解决方案


systemd 将尝试在启动时运行您的脚本,因此您的虚拟环境还没有被激活。您可以(也许)通过告诉 systemd 使用 virtualenv 的 bin 中的 python 和适当的环境变量来避免这个问题。或者,您可以激活该脚本在 systemd 中启动的预运行步骤。也许。

但总的来说,我会让 systemd 和你的操作系统变得容易,而忽略 virtualenv 绝对主义者。让脚本在你的开发机器上使用你想要的 virtualenv 运行,然后准备 systemd 以使用全局 python,并安装合适的包。对于不必使用 systemd 的脚本,您始终可以在该 pi 上使用 virtualenvs。Systemd 并不总是有最清晰的错误消息。

(如果您需要导入自定义模块,您可以在脚本中注入目录sys.path。这甚至可以完全避免为全局 Python安装包。)

这个答案当然是基于意见的。


推荐阅读