python - 我的 .exe 文件找不到它的数据文件
问题描述
我使用 cx_freeze 从我的 .py 文件创建一个 .exe。当我构建.exe文件时,我的2个数据文件成功包含在构建文件夹中,但是当我运行.exe时,程序找不到文件。
我的设置():
from cx_Freeze import setup, Executable
setup(name='pipermain',
options={ 'build_exe':{'packages':[ 'tkinter','PIL' ],'include_files': ['Transactions.csv', 'piper_copy.png' ]}},
description='',
executables= [Executable('pipermain.py')]
)
我认为这是我的 .py 代码中的文件路径的问题——如何为我的 .exe 编写正确的文件路径以查找数据文件,无论 .exe 在哪台计算机上运行?
我的文件路径是:
filepath = 'Transactions.csv'
因为数据文件在我的 .py 项目文件夹中。当我从 PyCharm 运行 .py 时,这成功了。但是当我运行 .exe 时,它无法在构建文件夹中找到该文件。现在,为了创建一个适用于任何系统的文件路径,它是:
filepath = os.path.abspath( 'Transactions.csv' )
.exe 仅在我的文件路径适合我自己的系统(/User/ethan/documents/project/transactions.csv)时才有效。但是如果我将此.exe 发送给其他人,文件路径显然不起作用。
我试图通过分配 p = os.path.abspath( 'transactions.csv' ) 来创建可变文件路径以在任何系统上工作,但是在运行 .exe 时我收到文件不存在的错误。我究竟做错了什么?
解决方案
通过包含方法:
def resource_path(relative_path):
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)
然后使用以下方法引用任何文件路径:
logopath =resource_path('Logo.jpg')
应该希望能解决你的问题
推荐阅读
- c# - Dapper 多重映射未在命名参数上拆分
- vue.js - Vue.js - vue.config.js 中的代理被忽略
- assembly - 离开后的基指针值
- python - QSerialPort readyRead 信号仅在应用程序被 waitForReadyRead() 阻塞时发出
- windows - 音频服务未启动/正常运行
- ios - 如何检测NSAttributedString中的字体是否为系统字体
- python - 神经网络的输入大小不是预期的
- python - 来自 csv 的所有行作为元组
- xamarin - 模拟 GPS 不更新 lon 和 lat
- laravel - laravel vscode 中的问题使用 wampserver 而不是 xampp