繁体   English   中英

将RPi.GPIO导入python脚本时出错

[英]Error when importing RPi.GPIO into python script

我有一个名为main.py的python脚本,该脚本使用import RPi.GPIO as GPIO RPi.GPIO库。当我使用python3 main.py运行脚本时,出现一个错误,指出未找到RPi.GPIO。 如果我使用sudo python3 main.py运行main.py,那么一切运行正常。

我使用tar.gz文件安装了RPi.GPIO。 我将其复制到我的/ home / pi / work目录中,并将压缩文件解压缩到同一目录中。 然后,我转到提取的目录,并使用sudo python3 setup.py install安装了RPi.GPIO。

由于我通常不使用linux,因此我无法完全理解权限,而我确定这是导致此问题的原因。 我猜测自从我使用sudo安装以来,该软件包仅对sudo用户可用。 问题是我正在从rc.local文件启动该程序,并且main.py脚本在启动时不会使用RPi.GPIO import语句运行。 如果删除导入语句,它将按预期启动。 以下是rc.local文件中的代码,该文件启动程序su -l pi -c '/usr/bin/python3 /home/pi/Work/main.py &'我尝试将su更改为sudo,但没有用。

有没有其他方法可以安装RPi.GPIO或更改rc.local脚本以使其正常工作? 另外,仅供参考,我的pi没有互联网连接,因此无法使用APT-GET卸载或安装软件包。

另外,以防万一您想知道软件包是否已正确安装。 如果我使用sudo python3启动python, sudo python3得到>>>。 然后,我再次输入import RPi.GPIO as GPIO我再次>>>。 然后,我键入GPIO.VERSION它将显示我安装的正确版本。 任何帮助,将不胜感激。

更新我没有为rc.local文件创建代码,而是仔细查看了一下。 我发现su -l pi -c '/usr/bin/python3 /home/pi/Work/main.py &'语句将用户从root更改为pi,并在pi用户下执行脚本。 所以我尝试将语句更改为su -l sudo -c '/usr/bin/python3 /home/pi/Work/main.py &' ,因为我可以通过使用sudo python3 main.py运行sudo python3 main.py ,所以在rc.local文件中将用户从pi更改为sudo会将文件作为sudo执行。 它仍然不起作用。 然后,我尝试从rc.local命令中删除su命令,并像/usr/bin/python3 /home/pi/Work/main.py &这样/usr/bin/python3 /home/pi/Work/main.py &但这也没有用。 有人对我如何使它起作用有任何建议吗?

对于在Linux或任何操作系统上使用Python开发,几乎总是会使用virtualenv ,对于我要开发的每个python项目都使用一个virtualenv

virtualenv易于设置,并且一旦激活,您就可以执行pip install命令,而无需使用sudo 尝试设置一个virtualenv并通过pip安装GPIO。

即使您没有设置virtualenv来帮助您的Python项目进行程序包管理,您仍然可以使用pip安装GPIO,但是您将面临现在要处理的权限问题。

但是,您真幸运! GPIO已安装在Raspbian上。 打开终端并输入python 进入Python解释器后,输入import RPi.GPIO 如果出现错误,则说明安装确实存在问题,但是可以使用virtualenv轻松解决。 使用python --version可以知道哪个是您的默认python。

Pip在概念上类似于您可能与Raspberry Pi一起用于安装其他软件的apt软件包管理器。 它是Python的软件包管理器,基本上是一个库注册表,您可以在命令行上立即安装它。

在RPi上,命令行是您的朋友,特别是在开发原始软件时。

祝好运!

在运行python脚本并将其放入rc.local之前,尝试使用睡眠编写bash脚本

#!/bin/sh

sleep 5
python python_script.py &

不要忘记使脚本可执行: chmod 755 yourscript.sh

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM