我在网上搜索过这个问题的答案,但我找不到答案。其他的例子是不同的,不会给我一个解决方案。这是覆盆子派3b,覆盆子,杰西。
我有一个使用蓝牙(ble)外围设备的kivy应用程序。我的BLE类必须扫描需要root权限的BLE设备。BLE类在kivy之外使用sudo工作,所以我不认为BLE代码存在根本问题。仅供参考,BLE类使用bluepy (btle)。为了让外围设备正常工作,我必须运行:
scanner = btle.Scanner()
dev = scanner.scan(3)scan需要以root用户身份运行。如果我不需要它,我会删除它,但随后程序的行为会发生变化。
我的问题是从命令提示符运行我的程序(使用BLE类和kivy),就像这样:python3 FS_run.py运行应用程序,不连接到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
编辑:
与使用sudo运行时相比,python -c "import sys; print(sys.path)"会打印不同的输出。使用sudo运行时缺少'/home/pi/kivy'。我该如何着手解决这个问题呢?
编辑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
因此,我在根目录中手动创建了.kivy目录,然后执行一个sudo cp命令来复制该文件。仍然不起作用。
发布于 2019-06-26 15:33:07
我通过在文件末尾添加"/root/profile"行使其正常工作:
export PYTHONPATH=/home/pi/Documents/kivy/kivy:$PYTHONPATH然后在启动应用程序之前:
sudo su
source ~/.profile我不知道这是否有帮助,但我也做到了:
sudo cp /home/pi/.kivy/config.ini /root/.kivy/config.inihttps://stackoverflow.com/questions/46613231
复制相似问题