如何执行嵌套的python文件

时间:2012-02-25 12:21:47

标签: python

我有3个python文件。(first.py,second.py,third.py)我正在从第一个python文件执行第二个python文件。第二个python文件使用'import'语句来使用第三个python文件。这就是我正在做的事情。 这是我的代码。

first.py

import os
file_path = "folder\second.py" 
os.system(file_path)

second.py

import third
...
(rest of the code)

third.py(包含用于生成PDF的ReportLab代码)

....
canvas.drawImage('xyz.jpg',0.2*inch, 7.65*inch, width=w*scale, height=h*scale)
....

当我执行此代码时,它会出错

IOError: Cannot open resource "xyz.jpg"

但是当我通过写python second.py直接执行second.py文件时,一切正常...... !!

即使我尝试了这段代码,

file_path = "folder\second.py" 
execfile(file_path)

但它给出了这个错误,

ImportError: No module named third

但正如我所说,如果我直接执行second.py文件,一切正常。 !!

为什么会这样?执行这样一种嵌套的python文件有什么好主意吗? 任何想法或建议将不胜感激。

我使用这三个文件只是为了给出我的结构的基本概念。您可以将此流程视为单个流程。这样的进程太多,每个文件都包含第一千行代码。这就是为什么我不能将整个代码更改为可以由import语句使用的模块化。 :-( 所以问题是如何制作一个python文件,它将负责执行所有其他进程。 (如果我们单独执行每个流程,一切正常)

4 个答案:

答案 0 :(得分:2)

如果你以正确的方式做到这一点应该很容易。您可以按照几个步骤进行设置。

第1步:将文件设置为运行或导入

#!/usr/bin/env python

def main():
    do_stuff()

if __name__ == '__main__':

作为脚本调用__name__ special variable时将包含__main__,导入时将包含模块名称。您可以使用它来提供可以任何方式使用的文件。


第2步:将您的子目录设为包

如果您将名为__init__.py的空文件添加到folder,则可以导入package


第3步:导入并运行脚本

from folder import first, second, third

first.main()
second.main()
third.main()

答案 1 :(得分:1)

你做事的方式是无效的。

您应该:创建一个主应用程序,然后导入1,2,3。

在1,2,3:您应该将事物定义为您的功能。然后从主应用程序中调用它们。

恕我直言:我不需要将大量代码放入单独的文件中,您只需将它们放入一个带有函数定义的文件中并正确调用它们。

答案 2 :(得分:0)

我的第二个S.Lott:你真的应该重新考虑你的设计。

但只是为了解答您的具体问题: 根据我到目前为止的猜测,你在folder中有second.py和third.py以及xyz.jpg。要使其工作,您必须首先更改工作目录。在first.py中以这种方式尝试:

import os
....
os.chdir('folder')
execfile('second.py')

尝试阅读os module

答案 3 :(得分:0)

未来的读者:

Pradyumna的回答from here为我解决了Moin Ahmed的第二个问题:

  

import sys,通过在运行期间附加路径来更改“sys.path”   时间,然后导入将帮助的模块

[即。 sys.path.append(execfile的目录)]