Python PyInstaller未标识相对路径

Python PyInstaller未标识相对路径,python,pyinstaller,executable,relative-path,Python,Pyinstaller,Executable,Relative Path,我正在尝试为我的python应用程序生成一个.exe。在代码中,我导入了一些嵌入文件,如下所示: f=open('source/store/data\u dictionary.json')) 尝试从生成的.exe运行应用程序时,我遇到如下错误: FileNotFoundError: [Errno 2] No such file or directory: 'source/store/data_dictionary.json' 要生成.exe,我已运行: pyinstaller --onef

我正在尝试为我的python应用程序生成一个.exe。在代码中,我导入了一些嵌入文件,如下所示:

f=open('source/store/data\u dictionary.json'))
尝试从生成的.exe运行应用程序时,我遇到如下错误:

FileNotFoundError: [Errno 2] No such file or directory: 'source/store/data_dictionary.json'

要生成.exe,我已运行:

pyinstaller --onefile app.py
我不知道是否有更好的方法在python脚本中导入文件以生成可执行文件,或者是否需要编写一些设置


您可以在这里查看我的源代码:

查看了源代码后,我注意到路径是相对于文件
app.py
的位置的。因此,只要创建可执行文件后,相对路径相同。例如,如果您将其作为一个捆绑包,其中exe与
app.py
位于同一位置。那么,无论捆绑包在哪里,以下内容都应该起作用

为此,您可以使用以下代码在运行exe文件时获取其目录,并使用该目录获取相关文件

import os

cur_dir = os.path.dirname(__file__) # print this to see what it looks like
             # something like: 'c:/path/to/file'

# then using an f-string to get the absolute path of the required files
f = open(f'{cur_dir}/source/store/data_dictionary.json') # essentially 'c:/path/to/file/source/store....'
编辑:(未测试,但您也可以更改工作目录并使用与以前相同的代码)


删除dist文件夹并运行您剪切的exe并将其粘贴到应该使用代码的位置,但问题是我不想共享此文件夹。我正计划部署它,我只希望用户拥有.exe(以及捆绑文件)。还有我在相对路径中调用的图像。有没有办法告诉PyInstaller不要捆绑此图像和信息文件并重做相对路径?如果希望它在dist文件夹中工作,则必须更改脚本
f=open('source/store/data_dictionary.json')的路径
您必须提供从C:/目录到工作地点的路径,以便在onefile exe中嵌入一些数据文件?您必须将数据文件添加到exe中的特定路径中,并修改您的代码,以便在从onefile exe运行时使用不同的方式查找文件-阅读文档请参阅Jonathon Reiner的回答,以获取有用的函数
resource\u path()
这将允许您访问文件,无论是从ee还是从源代码运行-请注意,使用
os.chdir()
通常不是一个好主意,此函数可以避免这种情况。问题是我只想分发可执行文件。但是根据你的回答,我认为我还必须分发资源,比如图像和这个json文件。
import os

cur_dir = os.path.dirname(__file__)
os.chdir(cur_dir) # change working directory

# print os.cwd() to see the current working directory, it should be the path to the file

#then proceed as before
f = open('source/store/data_dictionary.json')
.
.
.