PyInstaller打包书店管理程序exe运行提示找不到livros.csv文件求助
问题原因
报错触发的核心是PyInstaller --onefile 模式的运行机制和资源路径引用不匹配:
--onefile打包的exe运行时会先解压所有文件到系统临时目录,你代码中直接用相对路径'livros.csv'读取文件时,会优先找临时目录下的文件,而你打包时没有把csv文件一同打包进exe,自然找不到文件。- 就算你把csv放在exe同目录,代码写死的相对路径默认寻址路径是临时目录,也会读不到。
解决步骤
方法1:将csv文件打包进exe(适合csv不需要后续修改的场景)
- 先修改你代码中的路径读取逻辑,兼容开发和打包后的两种运行场景,新增路径处理函数:
import os import sys import pandas as pd def get_resource_path(relative_path): try: # PyInstaller运行时的临时目录变量 base_path = sys._MEIPASS except AttributeError: # 开发环境下取当前项目根目录 base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # 替换你原有的pd.read_csv调用 df = pd.read_csv(get_resource_path("livros.csv"))
- 修改打包命令,指定把livros.csv作为资源打包:
- Windows系统执行:
pyinstaller --onefile --add-data "livros.csv;." main.py - MacOS/Linux系统执行:
pyinstaller --onefile --add-data "livros.csv:." main.py
- Windows系统执行:
方法2:csv和exe分开放(适合csv需要后续编辑更新的场景)
直接修改代码读取exe所在目录的csv文件,不需要把csv打包进exe:
import os import sys import pandas as pd # 获取exe文件所在的文件夹路径 exe_dir = os.path.dirname(os.path.abspath(sys.executable)) csv_path = os.path.join(exe_dir, "livros.csv") df = pd.read_csv(csv_path)
打包时用你原来的命令pyinstaller --onefile main.py即可,打包完成后把livros.csv和生成的exe放在同一个文件夹下就能正常运行。
内容的提问来源于stack exchange,提问作者Jhosef Matheus
相关产品推荐
相关产品推荐

