Относительный импорт не работает из импортированных модулей - PullRequest
2 голосов
/ 21 марта 2019

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

test\test.py
test\modules\base.py
test\modules\blah.py

Мне нужно загрузить модули по имени.Каждый модуль реализует класс с одинаковыми методами, поэтому я загружаю их в словарь, чтобы я мог ссылаться на них по мере необходимости.Я получаю следующую ошибку при попытке сделать относительный импорт.

  File "modules/blah.py", line 1, in <module>
    from .base import BaseModule
ImportError: attempted relative import with no known parent package

Есть ли способ использовать относительный импорт из кода, импортированного с помощью importlib?Я использую Python 3. Ниже приведен простой пример, показывающий эту ошибку ...

test \ test.py:

#!/usr/bin/env python
import importlib
class Test():
    def __init__(self):
        spec = importlib.util.spec_from_file_location("blah", "modules/blah.py")
        mod = importlib.util.module_from_spec(spec)
        spec.loader.exec_module(mod)
def main():
    t = Test()
if __name__ == '__main__':
    main()

test \ modules \ base.py:

class BaseModule():
    modulename = "base"
    def __init__(self,name):
        print("Initializing module %s" % (self.modulename))

test \ modules \ blah.py:

from .base import BaseModule
class BlahModule(BaseModule):
    modulename = "blah"
...