我有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文件,它将负责执行所有其他进程。 (如果我们单独执行每个流程,一切正常)
答案 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的目录)]