【问题标题】:Opening PyGTK Python Module Error in py2exe在 py2exe 中打开 PyGTK Python 模块错误
【发布时间】:2011-10-26 12:46:23
【问题描述】:

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

我目前正在使用以下代码:

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

这在我测试时工作正常 - 打开窗口时没有打开 shell 窗口。

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

Traceback(最近一次调用最后一次):文件“Launchpad.py”,第 26 行,在 open_registration 文件“subprocess.pyc”,第 672 行,在 init
_execute_child WindowsError 中的文件“subprocess.pyc”,第 882 行: [错误2]系统找不到指定的文件

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

【问题讨论】:

  • 您可能想在标题或标签中提及 py2exe。
  • 我没有解决方案,但您可以尝试一些方法。看看将 RegistrationScreen.py 放在与 py2exe 创建的 exe 相同的目录中是否有帮助。那就是exe运行没有错误。如果这确实有效,那么在您的 setup.py 脚本中,您将不得不找到某种方法将 RegistrationScreen.py 作为包的一部分包含在内。也许 - docs.python.org/distutils/… ?
  • 这并没有解决它......这也很好,因为 RegistrationScreen.py 可能是我整个应用程序中最重要的源安全关键模块。

标签: python pygtk subprocess py2exe


【解决方案1】:

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

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

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

我知道这有点令人费解,但它可能会奏效。正如我所说,可能有更好的方法。

【讨论】:

  • 提出了一个很好的观点。为什么要从 Python 脚本/exe 调用 Python 脚本?为什么第二个脚本不是更常规使用的 Python 模块/类?
  • RegistrationScreen 应该是 Launchpad 的子屏幕...也许我应该重新考虑它是一个单独的模块。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多