我在网上搜索了这个问题的答案,但我已经做得很简短了。其他例子不同,不能让我找到解决方案。这是在Raspberry Pi 3b,Raspbian,Jessie。
我有一个使用蓝牙(ble)外围设备的kivy应用程序。我的BLE类必须扫描需要root
权限的BLE设备。 BLE类在kivy之外使用sudo
,所以我不认为BLE代码存在根本问题。仅供参考,BLE类使用bluepy(btle)。为了使外围设备正常工作,我必须运行:
scanner = btle.Scanner()
dev = scanner.scan(3)
scan
要求以root
身份运行。如果我不需要它,我会将其删除,但随后程序的行为会发生变化。
我的问题是从命令提示符运行我的程序(带有BLE类AND kivy),如下所示:python3 FS_run.py
运行应用程序w / out连接到BLE外设。但是,当我这样运行时:sudo python3 FS_run.py
,我得到:
Traceback (most recent call last):
File "FS_run.py", line 1, in <module>
from kivy.app import App
ImportError: No module named 'kivy'
我看过很多帖子,成功运行kivy w / sudo
使按钮不起作用。我已经更改了BLE类文件的权限(chmod),并尝试再次运行sudo
,但这没有帮助。我愿意接受其他建议来规避sudo
的使用。也许在子进程中运行BLE,但我不知道如何让它加入程序的其余部分。另外,我是BLE的新手,我刚刚上了BLE课。我只想说我在联盟中有点不合时宜。
我不是一个Linux家伙,所以我不确定在哪里集中精力来解决这个问题。不确定这是否有用,但我在另一篇文章中看到了这一点,所以我只想添加它:
which python3
给出/usr/bin/python3
sudo which python3
提供/usr/bin/python3
编辑:
python -c "import sys; print(sys.path)"
打印与使用sudo
运行时不同的输出。
使用'/home/pi/kivy'
运行时,sudo
会丢失。我该如何解决这个问题?
编辑2:
其他帖子说这修好了:
sudo cp /home/pi/.kivy/config.ini /root/.kivy/config.ini
对我不起作用。我得到了:
cp: cannot create regularfile '/root/.kivy/config.ini': No such file or directory
然后我在root中手动创建了.kivy目录,然后做了一个sudo cp来复制文件。仍然无效。
答案 0 :(得分:0)
我通过在文件"/root/profile"
的末尾添加来使其工作
该行:
export PYTHONPATH=/home/pi/Documents/kivy/kivy:$PYTHONPATH
然后在启动应用程序之前:
sudo su
source ~/.profile
我不知道它是否有帮助,但是我也有:
sudo cp /home/pi/.kivy/config.ini /root/.kivy/config.ini