You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python虚拟环境中GPIO代码运行报错求助

Python虚拟环境中GPIO控制报错问题解决

问题情况

在Python虚拟环境外运行GPIO控制代码可正常工作,但虚拟环境内运行时出现错误,核心报错为RuntimeError: Cannot determine SOC peripheral base address,同时伴随lgpio模块的降级警告。

运行代码

from gpiozero import LED
from time import sleep
from signal import signal, SIGTERM, SIGHUP, pause

def safe_exit(signum, frame):
    exit(1)

red = LED(26)

def flashingLights():
    while True:
        red.on()

错误信息

/home/cisco/Desktop/myenv/lib/python3.11/site-packages/gpiozero/devices.py:300: PinFactoryFallback: Falling back from lgpio: module 'lgpio' has no attribute 'SET_BIAS_DISABLE'
  warnings.warn(
Traceback (most recent call last):
  File "/home/cisco/Desktop/myenv/lib/python3.11/site-packages/gpiozero/pins/pi.py", line 411, in pin
    pin = self.pins[info]
          ~~~~~~~~~^^^^^^
KeyError: PinInfo(number=37, name='GPIO26', names=frozenset({'BOARD37', 'WPI25', 'GPIO26', '26', 26, 'J8:37', 'BCM26'}), pull='', row=19, col=1, interfaces=frozenset({'', 'sdio', 'gpio', 'dpi', 'spi', 'jtag'}))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/cisco/Desktop/ledlight.py", line 8, in <module>
    red = LED(26)
          ^^^^^^^
  File "/home/cisco/Desktop/myenv/lib/python3.11/site-packages/gpiozero/devices.py", line 108, in __call__
    self = super().__call__(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cisco/Desktop/myenv/lib/python3.11/site-packages/gpiozero/output_devices.py", line 192, in __init__
    super().__init__(pin, active_high=active_high,
  File "/home/cisco/Desktop/myenv/lib/python3.11/site-packages/gpiozero/output_devices.py", line 74, in __init__
    super().__init__(pin, pin_factory=pin_factory)
  File "/home/cisco/Desktop/myenv/lib/python3.11/site-packages/gpiozero/mixins.py", line 75, in __init__
    super().__init__(*args, **kwargs)
  File "/home/cisco/Desktop/myenv/lib/python3.11/site-packages/gpiozero/devices.py", line 553, in __init__
    pin = self.pin_factory.pin(pin)
          ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cisco/Desktop/myenv/lib/python3.11/site-packages/gpiozero/pins/pi.py", line 413, in pin
    pin = self.pin_class(self, info)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cisco/Desktop/myenv/lib/python3.11/site-packages/gpiozero/pins/rpigpio.py", line 101, in __init__
    GPIO.setup(self._number, GPIO.IN, self.GPIO_PULL_UPS[self._pull])
RuntimeError: Cannot determine SOC peripheral base address
(myenv) cisco@raspberrypi:~/Desktop $ 

已安装依赖

arandr             0.1.11
asgiref            3.7.2
av                 11.0.0
Babel              2.14.0
beautifulsoup4     4.12.3
blinker            1.7.0
certifi            2024.2.2
cffi               1.16.0
chardet            5.2.0
charset-normalizer 3.3.2
click              8.1.7
colorama           0.4.6
colorzero          2.0
cryptography       42.0.5
cupshelpers        1.0
dbus-python        1.3.2
distro             1.9.0
Flask              3.0.2
gpiozero           2.0.1
html5lib           1.1
idna               3.6
importlib_metadata 7.0.2
itsdangerous       2.1.2
Jinja2             3.1.3
lgpio              0.0.0.2
libevdev           0.11
lxml               5.1.0
MarkupSafe         2.1.5
more-itertools     10.2.0
numpy              1.26.4
oauthlib           3.2.2
olefile            0.47
pexpect            4.9.0
pgzero             1.2.1
picamera2          0.3.17
pidng              4.0.9
piexif             1.1.3
pigpio             1.78
pillow             10.2.0
pip                24.0
ptyprocess         0.7.0
pycairo            1.20.1
pycparser          2.21
pycups             2.0.1
pygame             2.5.2
PyGObject          3.42.2
pyinotify          0.9.6
PyJWT              2.8.0
PyOpenGL           3.1.7
pyOpenSSL          24.0.0
PyQt5              5.15.9
PyQt5_sip          12.13.0
pyserial           3.5
pysmbc             1.0.23
python-apt         2.6.0
python-dotenv      1.0.1
python-prctl       1.8.1
pytz               2024.1
pyudev             0.24.1
PyYAML             6.0.1
reportlab          4.1.0
requests           2.31.0
requests-oauthlib  1.3.1
responses          0.25.0
RPi.GPIO           0.7.1
rpi-lcd            0.0.3
RTIMULib           7.2.1
sense-hat          2.6.0
setuptools         66.1.1
simplejpeg         1.7.2
simplejson         3.19.2
six                1.16.0
smbus              1.1.post2
smbus2             0.4.3
soupsieve          2.5
spidev             3.6
ssh-import-id      5.11
toml               0.10.2
twython            3.9.1
typing_extensions  4.10.0
urllib3            2.2.1
v4l2-python3       0.3.4
webencodings       0.5.1
Werkzeug           3.0.1
wheel              0.42.0
zipp               3.17.0

已尝试操作

  • 匹配虚拟环境与系统的依赖包版本
  • 重启设备

解决方案

1. 升级lgpio模块

警告提示lgpio版本过低(当前为0.0.0.2),缺失必要属性,在虚拟环境内执行:

pip install --upgrade lgpio

2. 切换使用pigpio引脚工厂

pigpio对虚拟环境的兼容性更好,步骤如下:

  • 启动pigpio服务并设置开机自启:
sudo systemctl start pigpiod
sudo systemctl enable pigpiod
  • 运行代码时指定引脚工厂:
GPIOZERO_PIN_FACTORY=pigpio python ledlight.py

或者修改代码直接指定工厂:

from gpiozero import LED
from gpiozero.pins.pigpio import PiGPIOFactory
from time import sleep
from signal import signal, SIGTERM, SIGHUP, pause

def safe_exit(signum, frame):
    exit(1)

factory = PiGPIOFactory()
red = LED(26, pin_factory=factory)

def flashingLights():
    while True:
        red.on()

3. 重新编译安装RPi.GPIO

虚拟环境中安装的RPi.GPIO可能未正确编译,导致无法识别硬件地址,执行:

pip uninstall -y RPi.GPIO
pip install RPi.GPIO --no-binary :all:

4. 确保以管理员权限运行代码

GPIO操作需要root权限,虚拟环境内运行时需指定环境的Python路径:

sudo /home/cisco/Desktop/myenv/bin/python ledlight.py

内容的提问来源于stack exchange,提问作者Stevenson Gerard Eustache

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 13:35:57