我有两个 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
我该如何解决?
答案 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:\
中的绝对路径,否则您将无法这样做,因为不同人的用户帐户名不同。我强烈建议将它们合并到一个文件中,因为这也很可能会简化调试。我不确定使用 pathlib
或 shutil
之类的内容搜索目录是否可行,但它可能会找到错误的文件。