鱼C论坛

 找回密码
 立即注册
查看: 70|回复: 2

[已解决]main.py 调用a1.py, a2.py两个独立程序。用onefile|来编译成exe文件后

[复制链接]
发表于 2025-1-26 18:32:38 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
main.py用onefile编译成exe后,运行这个exe程序,a1和a2这两个文件会被原样释放出来吗?
最佳答案
2025-1-26 18:52:45
不会。通过 onefile 模式将 main.py 编译成 .exe 文件后,a1 和 a2 这两个文件不会被原样释放出来。onefile 模式会将所有代码和依赖打包进一个单独的可执行文件中,运行时会将必要的文件解压到临时目录中,而不是直接释放原文。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-1-26 18:32:46 | 显示全部楼层
不会。通过 onefile 模式将 main.py 编译成 .exe 文件后,a1.pya2.py 不会被原样释放出来,因为 onefile 模式会将所有代码和依赖打包进一个单独的可执行文件中。

具体情况如下:

  • 如果 a1.pya2.pymain.py 的模块或依赖,它们的相关代码也会被打包进 main.exe 中运行,而不会单独释放出来。
  • 如果 a1.pya2.py 是通过 os.system 或类似方式直接运行的独立脚本,需要特别处理。例如,可通过额外的配置将它们一起打包到可执行文件中,或动态释放到临时目录。


如果要确保这两份独立文件在运行时完整释放出来并运行,你可以考虑使用以下方式:

1. 在打包时,通过 PyInstaller--add-data 选项指定这两个文件。
   示例命令如下:
   pyinstaller --onefile --add-data "a1.py;." --add-data "a2.py;." main.py
   

2. 然后在代码中,通过 sys._MEIPASS 动态找到临时文件路径。例如:
   import sys
   import os
   
   if hasattr(sys, "_MEIPASS"):
       base_path = sys._MEIPASS
   else:
       base_path = os.path.abspath(".")
   
   a1_path = os.path.join(base_path, "a1.py")
   a2_path = os.path.join(base_path, "a2.py")

   # 示例:运行独立的 a1.py 文件
   os.system(f"python {a1_path}")
   

这种方法会在运行时临时释放 a1.pya2.py,然后运行它们。

总结:默认情况下,onefile 模式不会将 a1.pya2.py 原样释放,如果有需求,可通过手动指定或者临时释放来处理。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-1-26 18:52:45 | 显示全部楼层    本楼为最佳答案   
不会。通过 onefile 模式将 main.py 编译成 .exe 文件后,a1 和 a2 这两个文件不会被原样释放出来。onefile 模式会将所有代码和依赖打包进一个单独的可执行文件中,运行时会将必要的文件解压到临时目录中,而不是直接释放原文。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-6 01:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表