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

Python: Using a dynamically loaded module fails with AttributeError

环境:

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

  1. 动态检查是否安装了所需的依赖项
  2. 如果不是,则提示信息并停止程序,否则,转到3
  3. 源码动态导入安装模块
  4. 代码在需要时照常使用模块

问题是代码在 (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 解释器