首页 > 解决方案 > 我的 .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 时我收到文件不存在的错误。我究竟做错了什么?

标签: pythoncx-freeze

解决方案


通过包含方法:

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')

应该希望能解决你的问题


推荐阅读