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.Либ




чего мне здесь не хватает?

455   6  

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 файл в каждом каталоге.

обязательно указывайте __init__.py, Что заставляет Python знать, что эти каталоги содержат пакеты

Это если вы создаете пакет, и вы находите ошибку в импорте. Я узнал это на собственном горьком опыте.Ответ заключается не в том, чтобы добавить пакет в путь python или сделать это программно (что делать, если ваш модуль будет установлен, и ваша команда добавит его снова?) это плохой способ.

правильно ли это: 1) Используйте virtualenv pyvenv-3.4 или что-то подобное 2) активировать режим разработки - $python setup.py развивайте

убедитесь, что корневой каталог проекта подходит в sys.выход пути. Если нет, добавьте путь к корневому каталогу проекта в sys.путь.

Comments

    Ничего не найдено.