如何根据用户输入的模块名称动态导入对应Python模块?
解决动态导入模块的问题
你遇到的核心问题是:import语句会把代码里的名称当作字面量模块名,不会解析变量的值。要实现根据用户输入动态导入对应模块,得用Python标准库的importlib模块来处理。
原问题代码
Account = input("Which account to use?: ") if Account in acc.accounts: import Account as info # 这里的Account会被当作模块名,而非变量存储的输入值
解决方案:使用importlib.import_module()
importlib.import_module()支持传入字符串形式的模块名,刚好适配动态导入的场景。修改后的代码如下:
import importlib # 获取用户输入的账户名称 account_name = input("Which account to use?: ") # 验证账户是否在合法列表内 if account_name in acc.accounts: # 动态导入对应模块并赋值给info变量 info = importlib.import_module(account_name)
注意事项
- 确保要导入的模块(比如
Main.py或Spam.py)在Python的搜索路径中,最直接的方式是把它们和主脚本放在同一目录下。 - 如果模块位于子目录中,需要传入完整的模块路径字符串,比如
importlib.import_module("accounts.Main")(前提是子目录包含__init__.py文件)。
内容的提问来源于stack exchange,提问作者Scarlet
相关产品推荐
相关产品推荐

