Ранее я делал следующее для извлечения строки версии:
>>> filepath = './somemodule/__init__.py'
>>> name = 'dummy'
>>> module_source = imp.load_source(name, filepath)
>>> module_source.__version__
1.0.0
Теперь, когда imp
устарел в Python 3 (я на 3.7.1), что будетхорошая замена для load_source
, которая просто потребует библиотеки std?
Это кажется мне немного запутанным, и load_module
фактически устарела:
>>> from importlib.machinery import SourceFileLoader
>>> loaded = SourceFileLoader(name, filepath).load_module()
>>> loaded.__version__
1.0.0
РЕДАКТИРОВАТЬ # 1:
Это обсуждается в Импорт произвольного исходного файла Python.(Python 3.3 +) и одно из решений, которое появилось там:
>>> loader = importlib.machinery.SourceFileLoader(name, filepath)
>>> mod = types.ModuleType(loader.name)
>>> loader.exec_module(mod)
>>> mod.__version__
1.0.0