在动态实例化成员中导入 ftplib class

Import ftplib in dynamically instanciated member class

基于this template,我想创建自己的 CLI 界面来管理我们的服务。基本上这个 CLI 框架使用检查将 CLI arguments/commands 与模块 'commands' 中的成员 class 匹配,并通过 .run() 方法

实例化它

我的命令之一应该是 'fetch',它基本上是从 FTP 服务器下载一些数据。

所以我的命令模块中有一个 fetch.py class。

当我现在在这个动态实例化的模块成员中执行 from ftplib import FTP 时,它会立即失败,并在 ftplibsocket.py 中出现奇怪的 TypeError

看来,ftplib 在以这种方式导入时存在问题(其他库,如 json 工作得很好)。

似乎 ftplib 是唯一在动态加载模块中导入时出现问题的模块。

因此,在我需要它来获取一些文件之前,我动态加载了 ftplib 本身。 importlib 帮我这个忙:

ftplib = importlib.import_module('ftplib')

之后我就可以用经典的方式使用 ftplib:

with ftplib.FTP(config['FTP']['Host']) as ftp:
    ftp.login(user=config['FTP']['User'], passwd=config['FTP']['password'])