我知道这原则上已经问了很多问题。但是我在导入外部文件的一般事项中有一个更具体的问题。
所以,我有一些外部文件,每个文件都包含一个数据库 - 用于解析文本的不同语法 - 这是我的主脚本运行所必需的。我想通过命令行参数传递外部数据库脚本。每次调用主脚本一个。所以我在主脚本的顶部写了以下序列:
extGrammar = sys.argv[-1]
import extGrammar
所以我的理由是给变量extGrammar命名行参数的名称,该名称对应于相关数据库文件的名称,然后导入该文件。就像我写的那样
import grammar1
如果我有一个外部文件grammar1.py
但我收到错误“ImportError:No module named extGrammar”
我不明白。我的推理中的缺陷在哪里以及这样做的正确方法是什么?
由于
答案 0 :(得分:0)
您需要调用内置的函数,__import__
,而不是import
语句,因为Python语言将后者解析为直接导入(因此变量名称)作为模块处理,结果明显)。要导入通过变量通过名称引用的模块,您需要函数,而不是语句。
答案 1 :(得分:0)
尝试:
import importlib
extGrammar = importlib.import_module(extGrammar)
或:
exec ("import " + extGrammar)
问题是python没有意识到这是一个包含引用包的字符串的变量。相反,它会在路径中查找名为“extGrammar”的包。