我将运行我的 python 文件,或 /etc/rc.local 中的任何启动文件。
https://unix.stackexchange.com/questions/49626/purpose-and-typical-usage-of-etc-rc-local
可能有助于解释。
另外,我相信启动时运行的python版本与登录shell时运行的版本不同。
运行脚本时,您是否只是从命令行调用:
python myscript
“myscript”是您希望执行的那个?
我在我的 linux 服务器上启动时遇到了类似的问题调用脚本。我的解决方法是找到并调用我要运行的 python 版本的绝对路径。
例如:
如果我使用 /usr/bin/python3 中的内置 python 版本来运行我创建的小程序,我会看到:
scarter@sb-gateway:~$ /usr/bin/python3 camera_sentry_beta_v2.py
Traceback (most recent call last):
File "camera_sentry_beta_v2.py", line 3, in <module>
import cv2
ImportError: No module named 'cv2'
scarter@sb-gateway:~$
好像我在安装了所有模块的地方调用了正确版本的 python(我正在使用 anaconda)
scarter@sb-gateway:~$ /home/scarter/anaconda3/envs/ne/bin/python read_temp.py
我的脚本有效。
启动时运行的 python 版本可能与登录 pi 时运行的版本不同。这可能是路径问题。
运行:
echo $PATH
获取您登录时 pi 加载的路径列表。您可以运行该命令并提供输出吗?
例如,这是我的路径:
/home/scarter/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
我知道我在 /home/anaconda3/bin 下有一个 python 版本,它将首先运行。我也知道我在 /usr/bin 下运行了一个非常不同的版本,它不会具有与以前安装相同的模块。最后,我会做两件事。首先找到您希望运行的 python 的绝对路径,并在启动时运行脚本时调用它。其次,如果可以的话,我会尝试使用与 .bashrc 不同的地方来调用您的脚本。
另外,关于“workon”命令。这表明您已经创建了一个虚拟环境来运行 python。我参考这个示例来自
https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html
$ workon
$ mkvirtualenv mynewenv
New python executable in mynewenv/bin/python
Installing setuptools.............................................
..................................................................
..................................................................
done.
(mynewenv)$ workon
mynewenv
(mynewenv)$
例如,如果您创建了上述环境,则需要从mynewenv/bin/python调用python