我想要一个模块从另一个模块导入数据,但我不想硬编码其他模块的名称。我尝试使用sys.argv
,如:
from sys import argv
from argv[1] import database
但这会在invalid syntax
下给我argv[1]
。我也尝试过raw_input,如:
module = raw_input("Enter module name: ")
from module import database
这导致ImportError: No module named module
。我检查过这不是因为名称是模块。其他变量名称具有相同的结果。
变量数据库的名称将始终相同。我已经通过从模块的名称导入成功导入了这个变量,但是我想这个代码来处理模块名称不同的情况,因为我可以使用多个,并且用户没有义务使用相同的每次都是模块名称。有没有办法做到这一点?我见过的所有其他问题都没有解决这个具体问题,我也没有在Python的帮助模块中找到任何信息。
答案 0 :(得分:3)
您可以importlib.import_module
使用字符串导入给定模块:
导入模块。 name参数以绝对或相对术语指定要导入的模块(例如pkg.mod或..mod)。如果名称是以相对术语指定的,那么package参数必须设置为包的名称,该包用作解析包名的锚(例如import_module('.. mod','pkg.subpkg')将导入pkg.mod)。
(强调我的)
romanString
另外,作为附带建议,如果您计划从用户获取命令行参数,请使用专用命令行参数解析库而不是使用裸>>> from importlib import import_module
>>> module_name = 're'
>>> module = import_module(module_name)
>>> module
<module 're' from 'C:\\Users\\Christian\\AppData\\Local\\Programs\\Python\\Python36\\lib\\re.py'>
>>>
。那里有好几个。事实上,Python在标准库中有一个; argparse