如何从转换为exe的python脚本运行exe文件

时间:2021-03-14 14:48:04

标签: python pyinstaller

我有两个 EXE 文件,实际上都是 python 脚本,使用 pyinstaller 转换(Using Auto Py to Exe)。

file1.exe :是应用程序。 file2.exe : 是license app,检查license,如果ok就执行file1,否则就退出。

我的问题是,当我将两个 exe 文件合并为 1 个 exe 文件时,file2.exe 找不到 file1.exe,除非我将其复制到同一目录。

pyinstaller 命令:

cargo/src/greetings.h

现在我应该有这样的东西:

pyinstaller -y -F --add-data "D:/test/file1.exe";"."  "D:/test/file2.py"

但是每次我运行 file2.exe 都会给我这个错误

<块引用>

WinError 2] 系统找不到指定的文件:'file1.exe'

直到我将 file1.exe 复制到同一目录(因为它忽略了我已经将它合并到 pyinstaller 中) 所以文件树看起来像这样:

file2.exe 
      +------- file1.exe

file2 中启动 file1 的命令行是:

file1.exe
file2.exe 
      +------- file1.exe

我该如何解决?

4 个答案:

答案 0 :(得分:3)

当您执行 os.sysetm('file1.exe') 时,它希望在您运行 file2.exe 的当前工作目录中找到它

因此,您需要执行以下操作才能使用 file1.exe 中捆绑的 file2.exe

import sys, os
if getattr(sys, 'frozen', False):
    # we are running in a bundle
    bundle_dir = sys._MEIPASS
else:
    # we are running in a normal Python environment
    bundle_dir = os.path.dirname(os.path.abspath(__file__))

os.system(os.path.join(bundle_dir, 'file1.exe'))

正如我在评论中已经提到的,检查 PyInstaller 文档中的 Run-time Information 部分。

作为旁注,与您的问题无关,最好使用subprocess.run(),而不是os.system()

答案 1 :(得分:1)

this 帖子和 this 回答中,我认为您应该将 PyInstaller 命令更改为 pyinstaller -y -F --add-data "D:/test/file1.exe;." "D:/test/file2.py" 而不是 "D:/test/file1.exe";"."

如果它不起作用,请尝试 pyinstaller -y -F --add-data "D:/test/file1.exe;file1.exe" "D:/test/file2.py",如果您将 file2.exe 放在 PyInstaller 分发文件夹中,则启动 file1.exe 的命令将是 os.system('main/file1.exe')

答案 2 :(得分:0)

也许你应该尝试使用绝对路径。

答案 3 :(得分:0)

除非您知道文件在 C:\ 中的绝对路径,否则您将无法这样做,因为不同人的用户帐户名不同。我强烈建议将它们合并到一个文件中,因为这也很可能会简化调试。我不确定使用 pathlibshutil 之类的内容搜索目录是否可行,但它可能会找到错误的文件。