Как исправить ошибку "ImportError: no module named ..." в Python?
Как правильно исправить эту ошибку ImportError?
у меня есть следующая структура каталогов:
/home/bodacydo
/home/bodacydo/work
/home/bodacydo/work/project
/home/bodacydo/work/project/programs
/home/bodacydo/work/project/foo
а я в директории
/home/bodacydo/work/project
теперь, если я типа
python ./programs/my_python_program.py
Я мгновенно получаете
ImportError: No module named foo.tasks
The ./programs/my_python_program.py содержит следующую строку:
from foo.tasks import my_function
Я не могу понять, почему python не найдет ./foo/tasks.py - это есть.
если я делаю это из оболочки Python, то это работает:
python
>>> from foo.tasks import my_function
это только не работает, если я вызываю его через python ./programs/my_python_program.py сценарий.
6 ответов:
Python не добавляет текущий каталог в
sys.path, но скорее каталог, в котором находится скрипт. Добавить/home/bodacydo/work/projectилиsys.pathили$PYTHONPATH.
у вас есть файл с названием
__init__.pyв каталоге foo? Если нет, то python не распознает foo как пакет python.посмотреть пакетов в учебнике python для получения дополнительной информации.
вот пошаговое решение:
добавить скрипт под названием
run.pyin/home/bodacydo/work/projectи редактировать его так:import programs.my_python_program programs.my_python_program.main()(вместо
main()с эквивалентным методом вmy_python_program.)- на
/home/bodacydo/work/project- выполнить
run.pyобъяснение: Поскольку python добавляет к PYTHONPATH путь скрипт, из которого он запускается, работает
run.pyбудет добавлять/home/bodacydo/work/project. И вуаля,import foo.tasksбудут найдены.
пример решения для добавления библиотеки в PYTHONPATH.
добавьте следующую строку в ваш ~/.bashrc или просто запустить его напрямую:
export PYTHONPATH="$PYTHONPATH:$HOME/.python"затем свяжите необходимую библиотеку с вашим~/.папка python, например
ln -s /home/user/work/project/foo ~/.python/
в моем уме я должен учитывать, что
fooпапка-это автономная библиотека. Я мог бы рассмотреть вопрос о перемещении его вLib\site-packagesпапка в установке python. Я мог бы рассмотреть вопрос о добавленииfoo.pthесть файл.Я знаю, что это библиотека, так как
./programs/my_python_program.pyсодержит следующую строку:
from foo.tasks import my_functionтак что это не имеет значения
./programsявляется родственной папкой для./foo. Дело в том, чтоmy_python_program.pyвыполняется как a сценарий такой:python ./programs/my_python_program.py
A лучше исправить, чем параметр
PYTHONPATHиспользоватьpython -m module.pathэто будет правильно установить
sys.path[0]и является более надежным способом для выполнения модулей.у меня есть быстрая рецензия об этой проблеме, как и другие ответчики упомянули причина для этого
python path/to/file.pyставитpath/toв началеPYTHONPATH(sys.path).
Comments