我尝试使用exec语句导入模块但是失败了,
code.py
def test(jobname):
print jobname
exec ('import ' + jobname)
if __name__ = '__main__':
test('c:/python27/test1.py')
错误: 语法错误:
import:c:\ python27 \ test1.py
答案 0 :(得分:4)
你可能意味着execfile(jobname)
。导入不适用于文件名。它适用于包名称。任何好的教程都会涵盖这一点。另一个问题是\ t被解释为制表符,但在这里并非如此,因为你正在使用正斜杠而不是baclslash ......
答案 1 :(得分:1)
不知何故,我认为你必须要打电话
test('c:\python27\test1.py')
而不是
test('c:/python27/test1.py')
t
前面的反斜杠被解释为制表符。因此错误
import:c:\python27 est1.py
注意缺少t
。
其次,import
命令需要模块名称,而不是路径。要进行导入,请使用__import__
而不是exec
或execfile
。已从Python3中删除execfile
,因此为了将来的兼容性,您可能不希望在Python2中使用它。可以使用exec
代替,但有problems with using exec
.
假设你的PYTHONPATH中有c:\python27
,你可以
做这样的事情:
def test(jobname):
print jobname
__import__(jobname)
if __name__ == '__main__':
test('test1')
答案 2 :(得分:0)
def test(jobname):
print jobname
a = jobname.split('/')
b = "/".join(a[0:-1])
c = a[-1][0:-3]
sys.path.append(b)
exec ('import ' + c)
if __name__ = '__main__':
test('c:/python27/test1.py')
试试这段代码。您的路径必须添加到sys.path()变量中。
答案 3 :(得分:0)
我尝试使用exec语句
导入模块
不要那样做。
首先,您真的需要以编程方式导入模块吗?如果你告诉我们你真正想要完成什么,我愿意打赌我们可以找到方形页面的方孔,而不是教你如何将它强行放入圆孔。
如果您确实需要这样做,请使用the imp
module;这就是它的用途。
特别是如果你想通过路径而不是按模块名称导入模块,这对import
语句是不可能的(exec
不会对你有所帮助)。
以下是一个例子:
import imp
def test(jobname):
print jobname
while open(jobname, 'r') as f:
job = imp.load_module('test', f, jobname, ('.py', 'U', 1))
当然,如果import test1
上有sys.path
,那么sys.modules['test']
会做同样的事情。该模块将位于sys.modules['test1']
而不是job
,而位于本地变量test1
而不是全局变量{{1}},如果您已经重新加载而不会执行任何操作已加载它。但任何有充分理由做这类事情的人最好知道如何处理所有这些问题。