“WindowsError:[错误 2] 系统找不到指定的文件”未解决

2024-05-24

我已经通过 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

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

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

    subprocess.call(["python", "./start.py"])

提前致谢


这里至少有两个问题。


首先,你不能只使用python作为可执行文件。

在你的系统上,你有python on the %PATH%,这是rightPython 版本,包含您依赖的所有模块等。但您不能为所有用户依赖它。如果可以的话,你就不会打扰py2exe首先。

显然,在您正在测试的另一台机器上,根本没有任何名称python on the %PATH%,所以你会得到一个 WindowsError 2。

无论如何,你想与same您的脚本正在使用的 Python。


与此同时,没有理由期待start.py位于当前工作目录中。它(希望)与父脚本位于同一目录中,但这不会是工作目录。通常,Windows 程序以 C:\ 或 WINNT 目录或用户主目录等启动,并且每个版本的情况都不同。

当然,在开发过程中,您会使用命令提示符,并在每次运行脚本时将脚本的目录作为工作目录,或者使用可以有效执行等效操作的 IDE。所以它恰好起作用了。但当从 .exe 运行时,你就不能指望它了。

(这个调试起来会更有趣。子进程将成功启动并立即完成,而不做任何可见的事情。您的父脚本将不知道出了什么问题,因为您没有检查退出代码或标准错误,这将使调试变得很有趣。你真的应该使用check_call, not 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])

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

类似的工具py2exe可以自动找到您的依赖项import,但是如果您只是通过以下方式在不同的解释器实例中运行脚本subprocess,你必须告诉它(在你的setup.py)以包含该脚本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“WindowsError:[错误 2] 系统找不到指定的文件”未解决 的相关文章

随机推荐