PyInstaller添加数据文件未找到。

3

我正在尝试从一个非常简单的Python文件中制作可执行文件,该文件读取一个JSON文件。

在我的文件夹中,只有这两个文件:

test.py
data.json

所以我运行:

pyinstaller -F --add-data "data.json;data.json" test.py

这将创建一个dist文件夹,我可以在其中找到我的test.exe。但是当我运行exe文件时,它无法找到data.json。

FileNotFoundError: [Errno 2] No such file or directory: 'data.json'
[18556] Failed to execute script test

我的文件非常简单:

import json

# data.json is in the same folder as test.py, so no path is provided
with open("data.json") as f:
    data = json.load(f)
    print(data)

编辑:

好的,看起来当我编译exe文件时,我必须从编译它的同一个文件夹中执行它,所以我必须执行以下操作:

./dist/test.exe

如果我切换到dist文件夹并从那里执行文件,它就不能正常工作。
cd dist
test.exe   --> Fails

这显然不是我想要的。我应该能够从任何文件夹调用exe。data.json是从test.py所在的同一文件夹中包含的,因此在exe内部它们也应该在同一个“文件夹”中。


你是否正在与 data.json 文件同一目录下运行脚本? - Laura Smith
我正在运行pyinstaller,它位于test.py和data.json所在的文件夹中。然后要运行exe文件,我首先进入dist子文件夹。 - user2261062
JSON文件是否与可执行文件在同一文件夹中? - Laura Smith
不,json文件在exe文件内部。我有一个Python文件和一个json文件在同一个文件夹中。Python文件期望json文件在同一个文件夹中,但是当我制作exe文件时,我希望能够访问json文件。 - user2261062
2
如果您发现这个问题已经过时,请发布您的解决方案。我现在正在研究这个问题... - bblue
嘿@SembeiNorimaki,我现在有同样的问题。你找到了适当的解决方案吗?我的csv文件与我的.py脚本在同一个文件夹中,但我收到相同的错误,即找不到该文件。很多解决方案(例如这个)都使用sys._MEIPASS,但这并没有使我进一步。它会抛出错误AttributeError:module'sys'has no attribute'_MEIPASS' - QuagTeX
1个回答

5
将以下内容添加到您的运行脚本顶部。
import sys, os

os.chdir(sys._MEIPASS)

这应该会解决问题。原因在于当使用单一文件模式时,每次应用程序运行时都会在计算机的临时文件夹中创建一个新目录。所有依赖项都将被解压缩到此文件夹中。Pyinstaller将此目录存储在sys._MEIPASS中。因此,如果您要使用相对路径,则需要更改当前工作目录以访问文件。


这可能有效,但我遇到了一个访问该文件夹的权限错误。该exe文件不应需要特殊权限来访问系统文件夹。 - user2261062
即使作为管理员,它仍然给我一个权限错误。我会深入检查这个问题,谢谢。 - user2261062
echo %TEMP% 会给你什么结果?你使用的是 Windows 吗? - Robert Kearns
同样从cmd中返回。明天我会尝试更多,感谢你的帮助。 - user2261062
这是因为您试图将文件打开为文件夹,而不是 "data.json;.",请尝试使用 "data.json;." 第二个参数是文件所在的文件夹,而不是文件的路径。 - KrYmZiN
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接