使用auto-py-to-exe打包多Python脚本为.exe时文件找不到问题排查
解决auto-py-to-exe打包后subprocess调用脚本找不到文件的问题
问题原因
打包成单EXE后,程序运行时会被解压到系统临时目录,原脚本里用相对路径调用DataProcess.py和DeleteFiles.py的方式失效;同时直接调用系统python解释器,无法正确关联打包后的Python独立环境。
解决方案
方案一:将子脚本作为模块导入执行(推荐)
把两个子脚本的核心逻辑封装成函数,主脚本直接导入调用,既能避免subprocess的额外开销,打包时也会自动包含这些模块。
- 修改
DataProcess.py,把核心代码放入main()函数:
def main(): # 原GUI与数据处理的全部代码 ... if __name__ == "__main__": main()
- 修改
DeleteFiles.py,同理封装核心逻辑:
def main(): # 原删除临时文件的全部代码 ... if __name__ == "__main__": main()
- 修改主脚本:
import DataProcess import DeleteFiles import time DataProcess.main() time.sleep(5) DeleteFiles.main()
直接用auto-py-to-exe打包主脚本即可,无需额外配置。
方案二:保留subprocess调用,调整路径与打包配置
如果必须保留subprocess调用方式,需修改路径逻辑并配置打包时包含子脚本:
- 修改主脚本,获取打包后的临时目录并构建绝对路径:
import subprocess import time import sys import os # 获取程序运行的根目录:打包后用临时目录,未打包时用当前脚本目录 base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) # 构建子脚本的绝对路径 data_process_script = os.path.join(base_path, "DataProcess.py") delete_files_script = os.path.join(base_path, "DeleteFiles.py") # 用当前程序关联的Python解释器调用脚本 subprocess.call([sys.executable, data_process_script]) time.sleep(5) subprocess.call([sys.executable, delete_files_script])
- 配置auto-py-to-exe:
- 在界面的Additional Files区域,点击
Add Files,选择DataProcess.py和DeleteFiles.py,确保它们会被打包并随主程序解压到临时目录。
内容的提问来源于stack exchange,提问作者Luis Torres
相关产品推荐
相关产品推荐

