"WindowsError:[错误2]系统找不到指定的文件"未解析

Ash*_*ain 6 python gtk pygtk

我已经通过py2exe创建了我的python项目的exe文件,它有多个文件.当我在我的系统中运行此exe文件.它工作正常,但如果我把它放在另一个系统,然后它打开登录表单,然后它没有进入我在第二个python文件中写入的下一个窗口.它让我在日志文件中出现以下错误.

Traceback (most recent call last):
      File "login.py", line 246, in DataReader
      File "subprocess.pyo", line 711, in __init__
      File "subprocess.pyo", line 948, in _execute_child
    WindowsError: [Error 2] The system cannot find the file specified
Run Code Online (Sandbox Code Playgroud)

我知道这是重复的问题,但我尝试了很多stackoverflow的解决方案,但我没有解决这个问题.有人帮我解决这个问题.

并且在成功登录后,它将通过此​​代码转到start.py文件,但它不会出现并给出上述错误.

    subprocess.call(["python", "./start.py"])
Run Code Online (Sandbox Code Playgroud)

提前致谢

aba*_*ert 5

这里至少有两个问题。


首先,您不能仅用python作可执行文件。

在您的系统上,您已经python安装了%PATH%,并且它是正确的Python 版本,以及您依赖的所有模块等。但是您不能为所有用户都依赖它。如果可以,你就不会打扰py2exe

很显然,你正在测试另一台机器上,有一个在所有命名只会什么都得不到python%PATH%,所以你得到一个WindowsError 2。

无论如何,您希望使用您的脚本正在使用的相同Python运行。


同时,没有理由期望start.py在当前工作目录中。它(希望)与父脚本位于同一目录中,但这不会是工作目录。通常,Windows 程序以 C:\ 或 WINNT 目录或用户的主目录之类的内容启动,并且因版本而异。

当然,在开发过程中,您使用的是命令提示符,无论何时运行脚本,都将脚本目录作为您的工作目录,或者您正在使用有效执行等效操作的 IDE。所以它碰巧工作。但是当从 .exe 运行时,你不能指望它。

(这个调试起来会更有趣。子进程将成功启动并立即完成,不会做任何可见的事情。您的父脚本将不知道出现任何问题,因为您没有检查退出代码或标准错误,这将使调试变得很有趣。您确实应该使用check_call,而不是call。)

无论如何,如果你想让你的脚本找到另一个与它在同一个目录下的脚本,你需要明确地说出来。


因此,要解决这两个问题:

import os
import sys
mypath = os.path.abspath(__file__)
mydir = os.path.dirname(mypath)
start = os.path.join(mydir, "start.py")
subprocess.call([sys.executable, start])
Run Code Online (Sandbox Code Playgroud)

最后一件事:根据您的评论,我什至不确定您实际上是否真的捆绑start.py到您的可分发包中。在你的机器上,它工作的地方,它显然在C:\Python27\start.py. 但是在您正在测试的机器上……它存在于任何地方吗?如果没有,您显然无法运行它。

像这样的工具py2exe可以自动找到您的依赖项import,但是如果您只是通过在不同的解释器实例中运行脚本subprocess,则您将不得不告诉它(在您的 中setup.py)包含该脚本。