ImportError: нет модуля с именем-Python
у меня есть приложение python со следующей структурой каталогов:
src
|
+---- main
|
+---- util
|
+---- gen_py
|
+---- lib
в пакете главная, у меня есть модуль python с именем MyServer.py который имеет оператор импорта, например:
from gen_py.lib import MyService
чтобы это утверждение работало, я поместил следующую строку в начале MyServer.py:
import sys
sys.path.append('../gen_py/lib')
когда я бегу MyServer.py в терминале я получаю следующую ошибку:
ImportError: нет модуля с именем gen_py.Либ
чего мне здесь не хватает?
6 ответов:
ваша модификация
sys.pathпредполагается, что текущий рабочий каталог всегда находится вmain/. Но это не так. Вместо этого, просто добавьте родительский каталогsys.path:import sys import os.path sys.path.append(os.path.join(os.path.dirname(__file__), '..')) import gen_py.libне забудьте включить файл
__init__.pyв gen_py и lib-в противном случае они не будут распознаны как модули Python.
для импорта модуля Python для работы у вас должен быть" src "в вашем пути, а не"gen_py/lib".
при обработке импорта, как
import gen_py.lib, Он ищет модульgen_py, затем ищет подмодульlib.в модуле
gen_pyне будет "../gen_py/lib " (это будет в ".."), путь, который вы добавили, ничего не сделает, чтобы помочь процессу импорта.в зависимости от того, где вы его запускаете, попробуйте добавить относительный путь к папке "src". Возможно это
sys.path.append('..'). Вы также можете успешно запустить скрипт, находясь внутри папки src напрямую, через относительные пути, такие какpython main/MyServer.py
from ..gen_py.lib import MyServiceили
from main.gen_py.lib import MyServiceубедитесь, что у вас есть (хотя бы пустой)
__init__.pyфайл в каждом каталоге.
Это если вы создаете пакет, и вы находите ошибку в импорте. Я узнал это на собственном горьком опыте.Ответ заключается не в том, чтобы добавить пакет в путь python или сделать это программно (что делать, если ваш модуль будет установлен, и ваша команда добавит его снова?) это плохой способ.
правильно ли это: 1) Используйте virtualenv pyvenv-3.4 или что-то подобное 2) активировать режим разработки - $python setup.py развивайте
убедитесь, что корневой каталог проекта подходит в sys.выход пути. Если нет, добавьте путь к корневому каталогу проекта в sys.путь.
Comments