Python - модуль доступа из пакета, который не импортируется через __init__.py? - PullRequest
0 голосов
/ 02 января 2019

Я использую один пакет, который с __init__.py импортирует только одну переменную из модуля, но сам модуль не отображается. Есть ли способ получить доступ к этому модулю?

Давайте посмотрим в этом случае:

Вся упаковка:

test_package/
├── __init__.py
└── test_me.py

Теперь содержимое:

__ __ INIT ого :.

from .test_me import test_me

test_me.py

STATIC = 'static'


class Test:
    pass


test_me = Test()

Теперь, если я импортирую пакет test_package. Я могу получить доступ только к переменной test_me, которая является экземпляром класса Test. Хотя я не могу получить доступ к переменной STATIC, потому что сам модуль не был выставлен.

Есть ли в этом случае способ доступа к модулю test_me, а не только к одной из его переменных?

P.S. Если я использую sys, чтобы добавить путь непосредственно к модулю этого пакета, он выдает ошибку, что такой модуль не существует, когда я пытаюсь импортировать его.

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Если вы добавите каталог пакета к своему пути, Python может импортировать любой файл в этом каталоге, как если бы он был модулем сам по себе.

import sys
sys.path.extend(test_package.__path__)
import test_me
print(test_me.STATIC)
0 голосов
/ 02 января 2019

Вам необходимо импортировать их через __init__.py, поэтому измените его содержимое на:

from .test_me import test_me, STATIC

Теперь будет работать следующее:

import test_package
print(test_package.STATIC)
...