2011-08-13 56 views
1

我有一个用Python 2.7和PyGTK编写的项目,用py2exe编译。我有两个模块,“Launchpad.py”和“RegistrationScreen.py”。我需要从Launchpad.py打开RegistrationScreen.py。py2exe打开PyGTK Python模块错误

我使用下面的代码目前:

def open_registration(event, data=None): 
    subprocess.Popen(["python", "RegistrationScreen.py"]) 

当我测试这个工作正常 - 无弹窗开口打开的窗口。

但是,当我使用py2exe编译时,执行创建的应用程序时出现以下日志错误。

Traceback (most recent call last): File "Launchpad.py", line 26, in open_registration File "subprocess.pyc", line 672, in init
File "subprocess.pyc", line 882, in _execute_child WindowsError: [Error 2] The system cannot find the file specified

如何修复我的代码,以便py2exe能够正确编译它?有没有另一种方法可以从Launchpad.py打开RegistrationScreen.py模块的窗口,这不会在最终的.exe文件中引发错误?

+0

你可能想在标题或标签中提及py2exe。 – mgalgs

+0

我没有解决方案,但有几件事情可以尝试。看看是否将RegistrationScreen.py放在与py2exe创建的exe相同的目录下。这是该EXE运行没有错误。如果这确实起作用,那么在setup.py脚本中,您必须找到某种方法将RegistrationScreen.py作为包的一部分。也许 - http://docs.python.org/distutils/setupscript.html#installing-package-data? – arunkumar

+0

这并没有解决这个问题......这同样也是如此,因为RegistrationScreen.py可能是整个应用程序中最重要的单一安全关键模块。 – CodeMouse92

回答

1

问题是路径。 RegistrationScreen.py(可能)是在dist/library.zip中压缩的,但是调用它的代码正在dist/RegestrationScreen.py中查找它。

我不知道这是什么最好的解决方案是... py2exe是一种痛苦的访问文件。

此外,您可能不想做subprocess.Popen(["python", "RegistrationScreen.py"]),因为您无法保证您的用户将在系统范围内安装并访问python。如果你确实需要一个单独的进程,那么你可能应该单独在RegistrationScreen.py上运行py2exe来创建一个单独的.exe文件,然后将它包含在主.exe的dist文件夹中?

我知道这有些复杂,但它可能会起作用。正如我所说,可能有更好的办法。

+0

提出了一个很好的观点。为什么从Python脚本/ exe中调用Python脚本?为什么不是第二个脚本是更常规使用的Python模块/类? – Mark

+0

RegistrationScreen应该是Launchpad的子屏幕......也许我应该重新考虑它是一个单独的模块。谢谢! – CodeMouse92