Python: нет модуля с именем xxx - PullRequest
0 голосов
/ 11 мая 2018

Я ничего не получаю со следующей ошибкой на моем Raspberry Pi:

Мой собственный скрипт Python вызывает функцию из другого модуля с именем BlackBean.py, который, в свою очередь, импортирует другие модули, называемые "netaddr" и "configparser". Проблема в том, что я просто не могу обойти ошибку импорта, которая говорит мне: «Нет модуля с именем netaddr, или, если я закомментирую этот импорт, то это также приводит к ошибке без модуля с именем configparser. Так что я знаю, что это проблема пути, но я просто не могу исправить это!

Сценарий Blackbean.Py начинается так:

import broadlink
import ConfigParser
import sys, getopt
import time, binascii
import netaddr
import BlackBeanSettings
import re
from os import path
from Crypto.Cipher import AES

SettingsFile = ConfigParser.ConfigParser()
SettingsFile.optionxform = str
SettingsFile.read(BlackBeanSettings.BlackBeanControlSettings)

def execute_command(etc.........

Файл BlackBean.py находится в папке моего проекта SkyHD по адресу / home / pi / SkyHD. Файлы и папки "netaddr" и "configparser" были установлены с помощью pip в /home/pi/.local/lib/python2.7(and python3.5) / site-package.

sys.path содержит указанные выше папки в своем списке, и я также отредактировал .bashrc и добавил PYTHONPATH = $ {PYTHONPATH}: / home / pi / .local / lib / python2.7 / site-package: / home / pi /.local/lib/python3.5/site-package:/home/pi/SkyHD:../ но ничего из этого не работает Я предполагаю, что это должно быть что-то основное, но я просто не могу решить это! помощь!

Кроме того, еще немного информации, когда я сначала устанавливаю все файлы и запускаю свою программу, все работает нормально, и она находит файлы без проблем, только при перезагрузке не может найти файлы.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Это исправлено. Python ищет импортированные модули в 3 местах, первым из которых является папка, из которой вы запустили скрипт Python; поэтому для меня очевидный ответ - импортировать нужные мне модули непосредственно в мою папку Project (/ home / pi / myproject). Это работало просто отлично, оно работает каждый раз, даже после перезагрузки, которая была моей главной проблемой раньше. Нет необходимости создавать или изменять PYTHONPATH, не нужно возиться с записями в .bashrc или пытаться изменить записи пути Python. Вот шаги: Обновите PIP до версии 9.0.3 (не версии 10) с

pip install --upgrade pip==9.0.3

, затем установите необходимые модули со следующим

pip install --target=/home/pi/your_project_folder module_name

так что для меня это было ... pip install --target = / home / pi / SkyHD netaddr

Я уверен, что это не лучшая практика, но у моего Raspberry Pi есть только один проект, и модули, импортированные в папку Projects, просто не проблема. Надеюсь, что это поможет некоторым другим с той же проблемой.

0 голосов
/ 12 мая 2018

Вы предоставили недостаточно информации. В частности, подробности о команде python, используемой для запуска вашего скрипта, такие как его версия (python -V) и путь поиска модуля, если вы выполните

env -u PYTHONPATH python -c 'import sys; print(sys.path);'

Точно так же вы можете легко упростить задачу. Что произойдет, если вы сделаете python -m netaddr?

Очевидно, что в приведенных выше командах указана фактическая команда python, используемая для запуска вашего скрипта.

И, как @BoarGules упомянул в своих комментариях к вашему вопросу, вы никогда не должны когда-либо добавлять каталоги в PYTHONPATH для разных версий Python, если только вы не знаете, что модули в этих каталогах были написаны для работа с python2 и python3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...