Ошибка при импорте RPi.GPIO в скрипт Python - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть скрипт на python main.py, который импортирует библиотеку RPi.GPIO с использованием import RPi.GPIO as GPIO Когда я запускаю скрипт с использованием python3 main.py, я получаю сообщение об ошибке, в котором говорится, что RPi.GPIO не найден.Если я запускаю main.py, используя sudo python3 main.py, то все работает нормально.

Я установил RPi.GPIO, используя файл tar.gz.Я скопировал его в свой каталог / home / pi / work и распаковал архив в тот же каталог.Затем я перешел в извлеченный каталог и установил RPi.GPIO, используя sudo python3 setup.py install.

Поскольку я обычно не использую Linux, я не до конца понимаю разрешения, которые, я уверен, являются причиной этой проблемы.Я предполагаю, что, поскольку я установил с помощью sudo, пакет доступен только пользователю sudo.Проблема в том, что я запускаю эту программу из файла rc.local, и сценарий main.py не запускается при запуске с оператором импорта RPi.GPIO.Если я удаляю оператор импорта, он начинается как положено.Ниже приведен код в файле rc.local, который запускает программу su -l pi -c '/usr/bin/python3 /home/pi/Work/main.py &' Я попытался изменить su на sudo, но это не сработало.

Есть ли другой способ установить RPi.GPIO или изменить скрипт rc.local, чтобы это работало?Кроме того, к вашему сведению, мой пи не имеет подключения к Интернету, поэтому я не могу использовать APT-GET для удаления или установки пакета.

Также на всякий случай, если некоторые из вас задаются вопросом, правильно ли установлен пакет.Если я запускаю 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 &', думая, что, поскольку я могу запустить main.py с помощью sudo python3 main.py, то при изменении пользователя с pi на sudo в файле rc.local файл будет выполнен как sudo.Это все еще не работает.Затем я попытался удалить команду su из команды rc.local и запустил это /usr/bin/python3 /home/pi/Work/main.py &, но это тоже не сработало.У кого-нибудь есть предложения, как мне заставить это работать?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Попробуйте написать bash-скрипт с sleep перед запуском python-сценария и поместите его в rc.local

#!/bin/sh

sleep 5
python python_script.py &

Не забудьте сделать исполняемый скрипт: chmod 755 yourscript.sh

0 голосов
/ 06 декабря 2018

Для разработки на Python, в Linux или любой другой ОС, почти всегда используется virtualenv , по одному для каждого проекта Python, который я хочу разработать.

Виртуален легко установитьи после активации вы можете выполнять свои команды pip install без использования sudo.Попробуйте настроить virtualenv и установить GPIO через pip.

Даже если вы не настроили virtualenv для управления пакетами в своем проекте Python, вы все равно можете использовать pip для установкиGPIO, но вы столкнетесь с проблемами с разрешениями, с которыми вы сейчас сталкиваетесь.

Но тебе повезло!GPIO уже установлен на Raspbian.Откройте Терминал и введите python.Когда вы окажетесь в интерпретаторе Python, введите import RPi.GPIO.Если вы получили ошибку, существует настоящая проблема с вашей установкой, но ее можно легко устранить с помощью virtualenv.Это может помочь узнать, какой ваш питон по умолчанию, с python --version.

Pip концептуально похож на менеджер пакетов apt, который вы, вероятно, использовали с Raspberry Pi для установки других частей программного обеспечения.Это менеджер пакетов для Python, в основном это реестр библиотек, которые вы можете мгновенно установить из командной строки.

Командная строка - ваш друг на RPi, особенно когда дело доходит до разработки оригинального программного обеспечения.

Удачи!

...