Невозможно импортировать модули Python - PullRequest
2 голосов
/ 06 марта 2019

Моя структура проекта выглядит следующим образом:

--base
    __init__.py
    mod1.py
    mod2.py
    version.py

Содержимое __init__.py:

from .version import __version__ as version

__version__ = version

mod2 содержит класс с именем classA.

Внутри mod1 IЯ импортирую classA следующим образом:

mod1.py:

from base.mod2 import classA

Однако я получаю сообщение об ошибке «Нет модуля с именем base».

Примечание: import mod2 работает.Тем не менее, я хочу использовать подход абсолютного пути, но он не работает.Может кто-нибудь сказать мне, что я делаю не так?

РЕДАКТИРОВАТЬ : я выполняю скрипт Python из каталога base.Кроме того, base находится в sys.path (только что подтверждено).

РЕДАКТИРОВАТЬ 2 : я хочу импортировать класс аналогичным образом .

1 Ответ

0 голосов
/ 06 марта 2019

ОБНОВЛЕНИЕ 3 : Если вы хотите импортировать подмодуль из каталога пакета, который является base, вы можете использовать это (пропуская часть base в импорте) в файле /module mod1.py,

from mod2 import classA

Приведенное выше решение также работает со скриптами run_test_1.py и run_test_2.py.Надеюсь, это поможет =)

ОБНОВЛЕНИЕ 2 : я продемонстрирую тот же подход, выполнив скрипт на python из каталога test,

и создам скрипт с именем run_test_1.py в каталоге test, следуя той же структуре, что и «ОБНОВЛЕНИЕ 1», со следующим содержимым:

from base.mod2 import classA
a = classA()

Также создайте второй скрипт с именем run_test_2.py в каталоге test, со следующимсодержание:

from base import mod1
mod1.classA()

Оцените оба сценария с вашего терминала следующим образом:

$ cd ~/path/to/test/
$ python run_test_1.py
hello
$ python run_test_2.py
hello

Как показано, вы должны получить вывод "hello" на своем терминале.

ОБНОВЛЕНИЕ 1 : Я создал ту же структуру каталогов для вашего пакета, как и в каталоге с именем test,

-- test
    --base
        __init__.py
        mod1.py
        mod2.py
        version.py

Содержимое __init__.py совпадает с вашим.

from .version import __version__ as version
__version__ = version

Содержимое mod1.py совпадает с вашим,

from base.mod2 import classA

Содержимое mod2.py:

class classA:
    def __init__(self):
        print("hello")

Затем с помощью интерпретатора python изкаталог test, я проверял следующее,

>>> from base.mod2 import classA
>>> a = classA()
hello

Если вы уверены, что *Каталог 1056 * находится в sys.path, тогда вы можете попробовать это,

from base import mod2

Также я предлагаю вам изменить base на что-то более информативное для вашего проекта.

РЕДАКТИРОВАТЬ : Я также предлагаю вам ознакомиться с документацией "Пакеты" на веб-сайте Python, где также обсуждается, как загрузить подмодуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...