如何将含固定文件路径的Python脚本打包为可跨PC运行的.exe文件
解决PyInstaller打包.exe的文件路径问题
方案一:将资源文件打包进.exe内部
该方案会把xlsx、png文件直接嵌入最终的.exe,用户仅需单独运行.exe即可,无需额外携带文件。
步骤1:修改代码路径引用
替换固定路径为PyInstaller打包后的临时资源路径,通过sys._MEIPASS获取该路径:
import pandas as pd import sys import os # 获取资源文件的动态路径 def get_resource_path(relative_path): try: # 打包后运行时的临时资源目录 base_path = sys._MEIPASS except Exception: # 本地开发调试时的当前脚本目录 base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # 替换原固定路径为动态路径 dados = pd.read_excel(get_resource_path("Dados.xlsx"))
步骤2:PyInstaller打包命令
在命令行执行打包命令,用--add-data参数指定要打包的资源文件(Windows用;分隔路径,macOS/Linux用:):
# Windows系统 pyinstaller --onefile --add-data "Dados.xlsx;." --add-data "xxx.png;." your_script.py # macOS/Linux系统 pyinstaller --onefile --add-data "Dados.xlsx:." --add-data "xxx.png:." your_script.py
--onefile:生成单个.exe文件--add-data "文件名;目标路径":指定资源文件,.表示资源会被放到exe同层级的临时目录
方案二:使用相对路径(资源与.exe共存)
该方案要求用户将xlsx、png文件和.exe放在同一文件夹,代码自动读取同目录下的资源,无需嵌入exe内部。
修改代码路径引用
获取当前.exe所在目录,拼接资源文件路径:
import pandas as pd import os # 获取当前脚本/EXE的所在目录 current_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接资源文件的完整路径 dados_path = os.path.join(current_dir, "Dados.xlsx") dados = pd.read_excel(dados_path)
打包命令
直接执行单文件打包命令即可:
pyinstaller --onefile your_script.py
打包完成后,把Dados.xlsx和xxx.png复制到.exe所在文件夹,用户点击.exe就能正常运行。
内容的提问来源于stack exchange,提问作者Lucas Lopes
相关产品推荐
相关产品推荐

