You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller打包Python脚本生成exe运行时找不到CSV文件问题求助

问题根源

报错本质是打包后程序无法找到csv资源文件,由两个错误共同导致:

  1. 代码使用硬编码固定路径,未适配PyInstaller打包后的运行环境:PyInstaller单文件模式运行时,会先把所有资源解压到系统临时目录的随机文件夹(运行时由sys._MEIPASS变量指向该路径),写死的固定路径不可能匹配到这个随机生成的临时目录。
  2. --add-data参数的目标路径配置错误,资源文件打包后的存放位置和代码读取路径不匹配。

解决步骤

1. 修改Python代码,添加动态资源路径适配逻辑

在代码开头新增路径处理逻辑,替换原来的硬编码路径,修改后完整代码如下:

import sys
import os
from pandas import read_csv

def resource_path(relative_path):
    """获取资源绝对路径,同时适配开发环境和PyInstaller打包环境"""
    try:
        # PyInstaller运行时自动设置该变量,指向临时解压目录
        base_path = sys._MEIPASS
    except Exception:
        # 本地开发环境下取当前脚本所在目录作为根路径
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

def csv_parser(path):
    a = read_csv(path, header=0, sep=";")
    return a

# 替换原来的硬编码路径为动态获取的路径
volume_surfarea_table = csv_parser(resource_path(os.path.join("Tables", "Volume Area Table.csv")))
component_dr_table = csv_parser(resource_path(os.path.join("Tables", "Components DR Table.csv")))

def get_CF():
    vsp = float(input("What's the VSP? "))
    cf = vsp/5
    
    rowN = 0
    for x in range(64):
        if cf <= volume_surfarea_table.iloc[rowN,0]:
            hit_points = volume_surfarea_table.iloc[rowN,1]
            break
        rowN = rowN + 1
    
    return hit_points


def get_DR():
    compo_type = input("What's the component type? ")
    compo_type = compo_type.title()
    
    rowN = 0
    for x in range(6):
        if compo_type in component_dr_table.iloc[rowN,0]:
            compoDR = component_dr_table.iloc[rowN,1]
            break

        rowN = rowN + 1
    
    return compoDR


finished = "false"
while finished == "false":
    hit_points = get_CF()
    compoDR = get_DR()

    compo_stats = f"""Your component has {hit_points}HP and a DR of {compoDR}."""

    print(compo_stats)
    
    done = input("Are you finished? (y/n) ")
    if done == "y":
        finished = "true"

2. 修改PyInstaller打包命令

调整--add-data参数的目标路径,让资源文件打包后存放位置和代码读取路径匹配,Windows下命令如下:

pyinstaller -F --add-data "Tables\Volume Area Table.csv;Tables\" --add-data "Tables\Components DR Table.csv;Tables\" "Vehicles Calc.py"

如果是MacOS/Linux系统,将--add-data中的分号替换为冒号即可:

pyinstaller -F --add-data "Tables/Volume Area Table.csv:Tables/" --add-data "Tables/Components DR Table.csv:Tables/" "Vehicles Calc.py"

注意事项

  • 打包前确认你的项目根目录下存在Tables文件夹,且两个目标csv文件存放在该文件夹内
  • 打包完成后生成的exe文件在dist目录下,直接运行即可

内容的提问来源于stack exchange,提问作者AnFa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:57:04