Neopixel 库无法在树莓派的 python 虚拟环境中运行(需要 sudo)

问题描述 投票:0回答:1

Adafruit neopixel 库是否可以拥有树莓派 4b 的 root 访问权限,同时不在虚拟环境中控制 WS2812B LED。我已经在 venv 中下载了 adafruit 模块,但是它没有安装在 python3 或 thonny 中。下载外部模块似乎非常困难,这些模块无法获得 root 访问权限,也无法在没有 sudo(控制 GPIO 引脚)的情况下工作。谢谢你,来自 pi 新用户。

- cd my_project
$ sudo python -m venv env
$ source env/bin/activate
(env) $
python3 -m pip install rpi_ws281x adafruit-circuitpython-neopixel
python3 -m pip install --force-reinstall adafruit-blinka
#sudo thonny - did not work and neither did venv in thonny work
sudo python
>>>import board
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'board'
>>> import neopixel
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'neopixel'

背景信息: 使用这个库显然有两个限制:它必须在 Python 3 中运行,并且必须以 root 身份运行。文档解释说“为了让 NeoPixels 在 Raspberry Pi 上工作,您必须以 root 身份运行代码!需要 root 访问权限才能访问 RPi 外围设备。”

如何解决 pi 不会授予对外部模块的 root 访问权限的冲突,这是 neopixel 需要的,而 venv 不允许。

root sudo python-venv adafruit neopixel
1个回答
0
投票

Python虚拟环境是通过环境变量来标识的。当您使用

sudo
时,您将放弃本地环境,因此通常虚拟环境无法在权限转换中幸存。

您可以使用

sudo
选项明确要求
--preserve-env
保留某些环境变量,如下所示:

sudo --preserve-env=VIRTUAL_ENV,PATH

例如:

$ python -m venv env
$ . env/bin/activate
(env) $ pip install rpi_ws281x adafruit-circuitpython-neopixel
(env) $ sudo  --preserve-env=PATH,VIRTUAL_ENV python
Python 3.11.6 (main, Oct  3 2023, 00:00:00) [GCC 13.2.1 20230728 (Red Hat 13.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import rpi_ws281x
>>> rpi_ws281x.WS2811_SUCCESS
0

可以配置您的 Pi,这样您就不需要

root
权限来访问 GPIO 设备。有许多在线指南将引导您完成整个过程。

© www.soinside.com 2019 - 2024. All rights reserved.