树莓派开机启动bash脚本无法激活虚拟环境访问内部安装包问题
问题根源
你的workon tm命令已经成功激活了虚拟环境,报错的核心原因是最后一行执行Python脚本时加了sudo:sudo会重置当前shell的所有环境变量,包括虚拟环境激活后修改的PATH变量,最终调用的是系统全局的Python解释器,自然找不到虚拟环境内安装的flask_mysqldb依赖。
你可以在脚本里workon tm后加一行which python,运行脚本后如果输出路径是/home/pi/.virtualenvs/tm/bin/python,就可以确认虚拟环境激活是正常的。
解决方案
方案1(推荐,无特殊权限需求时用)
直接去掉最后一行的sudo即可,普通用户权限完全可以运行监听5000端口的Web服务:
# 把最后一行改成 python /home/pi/MySQLAppTrueTrue/main.py
方案2(确实需要root权限运行时用)
直接调用虚拟环境下Python解释器的绝对路径,不需要依赖环境变量识别虚拟环境:
# 把最后一行改成 sudo /home/pi/.virtualenvs/tm/bin/python /home/pi/MySQLAppTrueTrue/main.py
用这个方案的话,你甚至可以省略脚本里所有source、workon相关的代码,直接调用绝对路径的Python解释器就能正常加载虚拟环境的依赖。
额外说明
不需要把依赖包安装到全局环境,虚拟环境完全可以满足开机自启的需求,全局安装依赖会带来版本冲突、环境污染等问题,不推荐这么做。
内容的提问来源于stack exchange,提问作者Matthew Van Ginneken
相关产品推荐
相关产品推荐

