Модуль, загруженный вручную, не имеет всех атрибутов - PullRequest
0 голосов
/ 24 января 2020

делаю ручную загрузку модуля requests. Я делаю это два раза подряд, один за другим, таким же образом. Модуль установлен и расположен по умолчанию site-packages. Сценарий:

specification = importlib.util.spec_from_file_location(
    name='requests',
    location='/usr/local/lib/python3.7/site-packages/requests/__init__.py',
)
module = importlib.util.module_from_spec(spec=specification)
sys.modules[module.__name__] = module
specification.loader.exec_module(module=module)

requests = module
print(requests)
print(len(dir(requests)))
print(requests.api)

print()
print()

specification = importlib.util.spec_from_file_location(
    name='requests',
    location='/usr/local/lib/python3.7/site-packages/requests/__init__.py',
)
module = importlib.util.module_from_spec(spec=specification)
sys.modules[module.__name__] = module
specification.loader.exec_module(module=module)

requests = module
print(requests)
print(len(dir(requests)))
print(requests.api)

Вывод следующий:

module 'requests' from '/usr/local/lib/python3.7/site-packages/requests/__init__.py'>
66
<module 'requests.api' from '/usr/local/lib/python3.7/site-packages/requests/api.py'>


module 'requests' from '/usr/local/lib/python3.7/site-packages/requests/__init__.py'>
53
Traceback (most recent call last):
...
    print(requests.api)
AttributeError: module 'requests' has no attribute 'api'

Если я взгляну на ответы dir, у первого будет гораздо больше атрибуты, чем второй. Например, атрибут api представлен в первом модуле, но отсутствует во втором.

Я пытался (любой из них не работает):

  • globals()[module.__name__] = module после каждой загрузки.
  • del sys.modules[module.__name__] до и после каждой загрузки.

Что я пропустил? Заранее спасибо.

...