Python:使用动态加载的模块失败,出现AttributeError



环境

  • Python:3.9
  • PyCharm下的Virtualenv

在我正在编写的当前源代码中,我尝试:

  1. 动态检查是否安装了所需的依赖项
  2. 如果没有,则显示一条消息,程序停止,否则,转至3
  3. 源代码动态导入已安装的模块
  4. 代码在需要时照常使用模块

问题是代码在tkfilebrowser模块的(4)处失败。这是我的导入代码:

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的Run配置中使用了一个不正确的Python二进制文件,所以,当我意识到这一点时,我立即更改了它,一切都很顺利。

因此,如果有人遇到类似的错误,只需确保您的virtualenv或您配置的Python环境确实在使用,而不是另一个。

在PyCharm:

编辑配置=>Python解释器

最新更新