将转换后的 .py 文件的工作目录设置为 .exe 文件

2023-12-05

我在转换 .exe 文件时遇到问题。它没有找到我的 Excel 文件。

我有以下代码

import pandas as pd
import os

abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)

#Load data
data = pd.read_excel("data.xlsx")
...

代码的第二部分(abspath,dname,os.chdir(dname)是设置.py文件位置的路径。因此,将.py文件和.xlsx文件放在一起总是让它找到它,无论如何那个地点。

然后我使用将其转换为 .exe

pyinstaller --hidden-import=pandas --onefile script.py

为了使我的 script.py 工作,我必须将 data.xlsx 文件与 script.py 文件放在同一文件夹中。

我假设将 .exe 文件从 dir 文件夹拖到与 .xlsx 文件相同的位置将使其运行,但运行 .exe 文件会返回以下错误:

无法执行脚本脚本。目录中没有这样的文件“data.xlsx”。

无论“.exe+.xlsx”文件夹的位置如何,如何让它读取我的 Excel 文件?


您遇到的问题是,当您运行可执行文件时,文件将被提取到临时目录并从那里运行。这意味着 i) 当前/工作目录是临时目录,ii) 实际执行的程序的位置也是该临时目录,因此获取路径的两种方法都不会达到您想要的效果。

但是,当作为可执行文件运行时,可以通过以下方式获得一些附加值:sys模块。在这种情况下有用的是sys.frozen,设置为True, and sys.executable,它设置为用户运行的可执行文件的位置。

过去我通过以下方式找到了我需要的路径:

if getattr(sys, 'frozen', False):
    app_path = os.path.dirname(sys.executable)
else:
    app_path = os.path.dirname(os.path.abspath(__file__))

where app_path现在将是脚本或可执行文件的目录。然后您可以使用它作为访问其他文件的基础。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将转换后的 .py 文件的工作目录设置为 .exe 文件 的相关文章