激活虚拟环境并从 shell 脚本中运行 Python 脚本。

6

在使用crontab之前,我正在测试(Python)机器人脚本。 有人建议我运行shell脚本,在crontab中运行python脚本。 为了使shell脚本运行,我需要激活venv。 这就是问题所在。 当我尝试运行run_socialbot.py时,我得到:

Traceback (most recent call last):
  File "/home/gsb/socialbot.py", line 3, in <module>
    from instapy import InstaPy
ModuleNotFoundError: No module named 'instapy'

即使已经在虚拟环境中安装了instapy。当我使用“python3”打开解释器并尝试在激活venv时导入instapy时,它可以正常工作。以下是shell脚本代码:
#! /bin/bash

source /home/gsb/venv/bin/activate 

/usr/bin/python3 /home/gsb/socialbot.py

有人能帮忙吗?先感谢了。

我在一台DigitalOcean服务器上运行。Ubuntu 20.04

1个回答

2
你的Shell脚本激活了虚拟环境,但是它明确调用了绝对路径/usr/bin/python3。这不是虚拟环境的Python可执行文件。激活虚拟环境的整个目的是设置$PATH,以便python指向虚拟环境解释器。
在你的包装脚本中,将其更改为:
python /home/gsb/socialbot.py

或者您可以完全删除bash包装脚本,并将venv shebang放入socialbot.py,然后直接在crontab中使用此Python文件。使该文件可执行,并将其添加为第一行:

#!/home/gsb/venv/bin/python

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接