Python: нет модуля с именем xxx
Я получаю в никуда со следующей ошибкой на моем 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(и 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 ответа
Это фиксированная. Python ищет импортированные модули в 3 местах, первым из которых является папка, из которой вы запустили скрипт Python; поэтому для меня очевидный ответ - импортировать нужные мне модули непосредственно в мою папку Project (/home/pi/myproject). Это работало просто отлично, это работает каждый раз, даже после перезагрузки, которая была моей главной проблемой раньше. Нет необходимости создавать или изменять PYTHONPATH, не нужно возиться с записями в.bashrc или пытаться изменить записи пути Python. Вот шаги: Обновите PIP до версии 9.0.3 (не ver 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, просто не проблема. Надеюсь, что это поможет некоторым другим с той же проблемой.
Вы предоставили недостаточно информации. В частности, подробности о python
команда, используемая для запуска вашего скрипта, например его версия (python -V
) и его модуль поиска пути, если вы делаете
env -u PYTHONPATH python -c 'import sys; print(sys.path);'
Точно так же вы можете легко упростить проблему. Что произойдет, если вы делаете python -m netaddr
?
Очевидно, что в приведенных выше командах указана фактическая команда python, используемая для запуска вашего скрипта.
И, как @BoarGules упомянул в своих комментариях к вашему вопросу, вы никогда не должны добавлять каталоги в PYTHONPATH
для разных версий python, если вы не знаете, что модули в этих каталогах были написаны для работы с python2 и python3.