Как правильно исправить эту ошибку 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
./programs/my_python_program.py
Содержит следующую строку:
from foo.tasks import my_function
Я не могу понять, почему питон не находит ./foo/tasks.py
- он там.
Если я сделаю это из оболочки Python, то все заработает:
python
>>> from foo.tasks import my_function
Это не работает, только если я вызываю это через python ./programs/my_python_program.py
скрипт.
__init__.py
указывает только на то, что каталог следует рассматривать как пакет, если его родительскийsys.path
элемент находится в пакете или сам является пакетом.export PYTHONPATH=`pwd`
/home/bodacydo/work
... см. Этот ответУ вас есть файл с именем
__init__.py
в каталоге foo? В противном случае python не распознает foo как пакет python.См. Раздел о пакетах в руководстве по python для получения дополнительной информации.
источник
__init__.py
. На этот раз проблема была с$PYTHONPATH
. Решение Игнасио сработало.Вот пошаговое решение:
Добавить скрипт
run.py
в/home/bodacydo/work/project
и изменить его , как это:(замените
main()
свой эквивалентный метод вmy_python_program
.)/home/bodacydo/work/project
run.py
Объяснение: Поскольку python добавляет в PYTHONPATH путь к сценарию, из которого он запускается ,
run.py
будет добавлен запуск/home/bodacydo/work/project
. И вуаля ,import foo.tasks
будет найдено.источник
Пример решения для добавления библиотеки в ваш PYTHONPATH.
Добавьте следующую строку в свой ~ / .bashrc или просто запустите ее напрямую:
Затем свяжите нужную библиотеку в папку ~ / .python, например
источник
Лучше исправить , чем настройки
PYTHONPATH
заключается в использованииpython -m module.path
Это правильно установит
sys.path[0]
и является более надежным способом выполнения модулей.У меня есть небольшая запись об этой проблеме, так как другие респонденты упоминали, что причина этого
python path/to/file.py
помещаетсяpath/to
в началоPYTHONPATH
(sys.path
).источник
На мой взгляд, я должен учитывать, что
foo
папка - это отдельная библиотека. Я мог бы захотеть переместить его вLib\site-packages
папку в установке python. Возможно, я захочу рассмотреть возможность добавления тудаfoo.pth
файла.Я знаю, что это библиотека, поскольку она
./programs/my_python_program.py
содержит следующую строку:Так что не имеет значения, что
./programs
это родственная папка./foo
. Дело в том, чтоmy_python_program.py
он запускается как такой сценарий:источник
Если у вас есть эта проблема при использовании установленной версии
setup.py
, убедитесь, что ваш модуль включен вpackages
источник