Python: 使用动态加载的模块失败并出现 AttributeError
Python: Using a dynamically loaded module fails with AttributeError
环境:
- Python: 3.9
- PyCharm
下的虚拟环境
在我正在编写的当前源代码中,我尝试:
- 动态检查是否安装了所需的依赖项
- 如果不是,则提示信息并停止程序,否则,转到3
- 源码动态导入安装模块
- 代码在需要时照常使用模块
问题是代码在 (4) 处与 tkfilebrowser 模块失败。这是我的导入代码:
already_imported = {}
def do_import(dependency):
"""
Imports the dependency module
:param dependency: the name of the dependency module to import
:raise: ModuleNotFoundError if not found
:return: the imported module
"""
global already_imported
if dependency in already_imported:
result_module = already_imported[dependency]
else:
result_module = importlib.import_module(dependency)
already_imported[dependency] = result_module
return result_module
调用之后,上下文是这样的:
>>> tkfilebrowser = do_import('tkfilebrowser')
>>> dir(tkfilebrowser)
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
>>> type(tkfilebrowser)
<class 'module'>
>>> print(tkfilebrowser)
<module 'tkfilebrowser' (namespace)>
>>> tkfilebrowser.askopendirname()
AttributeError: module 'tkfilebrowser' has no attribute 'askopendirname'
我猜不出这里出了什么问题,我应该怎么做才能正确使用该模块。
源代码中一切正常。
问题是我在 PyCharm 的 运行 配置中使用了不正确的 Python 二进制文件,所以,我一意识到,就更改了它,一切顺利.
因此,如果有人带着类似的错误来到这里,请务必确保您的 virtualenv 或您配置的任何 Python 环境确实在使用,而不是其他环境。
在PyCharm中:
编辑配置 => Python 解释器
环境:
- Python: 3.9
- PyCharm 下的虚拟环境
在我正在编写的当前源代码中,我尝试:
- 动态检查是否安装了所需的依赖项
- 如果不是,则提示信息并停止程序,否则,转到3
- 源码动态导入安装模块
- 代码在需要时照常使用模块
问题是代码在 (4) 处与 tkfilebrowser 模块失败。这是我的导入代码:
already_imported = {}
def do_import(dependency):
"""
Imports the dependency module
:param dependency: the name of the dependency module to import
:raise: ModuleNotFoundError if not found
:return: the imported module
"""
global already_imported
if dependency in already_imported:
result_module = already_imported[dependency]
else:
result_module = importlib.import_module(dependency)
already_imported[dependency] = result_module
return result_module
调用之后,上下文是这样的:
>>> tkfilebrowser = do_import('tkfilebrowser')
>>> dir(tkfilebrowser)
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
>>> type(tkfilebrowser)
<class 'module'>
>>> print(tkfilebrowser)
<module 'tkfilebrowser' (namespace)>
>>> tkfilebrowser.askopendirname()
AttributeError: module 'tkfilebrowser' has no attribute 'askopendirname'
我猜不出这里出了什么问题,我应该怎么做才能正确使用该模块。
源代码中一切正常。
问题是我在 PyCharm 的 运行 配置中使用了不正确的 Python 二进制文件,所以,我一意识到,就更改了它,一切顺利.
因此,如果有人带着类似的错误来到这里,请务必确保您的 virtualenv 或您配置的任何 Python 环境确实在使用,而不是其他环境。
在PyCharm中:
编辑配置 => Python 解释器