手动加载的模块没有所有属性

时间:2020-01-24 14:48:06

标签: python python-3.x python-module python-importlib

我手动加载模块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__]每次加载前后。

我错过了什么?预先谢谢你。

0 个答案:

没有答案