我有一个python程序,将两个文本文件作为输入。 我已经使用pyinstaller将这个python程序(一个.py文件)转换为一个.exe文件。 .exe文件在运行时给出FileNotFoundError。 但是,将.txt文件复制到存在.exe的路径时,它可以正常工作。我的意图是不复制.txt文件,而是将.txt文件与.exe捆绑在一起,以便无法访问.txt文件。 我想将所有.txt文件依赖项与.exe捆绑在一起,最终应该只有一个.exe文件,当我运行它时,它的工作方式应与运行python程序时相同。请建议我达到相同目的的方法
我是pyinstaller的新手。我曾尝试将.txt文件添加到.spec文件中的data参数。但这无法将文本文件复制到存在我的.exe的dist文件夹中。但是正如我提到的,我只需要一个.exe文件。即使.exe文件与无法访问任何文本文件的其他人共享,.exe也必须成功运行
a.datas + = [('D:/Trial/src/readme_text_files/readme2.D./Trial/src/readme_text_files/readme1.txt','readme_text_files / readme1.txt','readme_text_files'), txt”,“ readme_text_files / readme2.txt”,“ readme_text_files”), ]
以上代码已添加到.spec文件,因此,我认为在运行时,必须将readme_text_files复制到存在.exe的文件夹中: pyinstaller spec_filename.spec
答案 0 :(得分:0)
我希望将.txt文件与.exe文件捆绑在一起,因此我执行了以下操作:
我以以下方式编辑.spec文件:
a = Analysis(['mainProgram_edited_for_datas.py'],
pathex=['D:\\Trial\\src'],
binaries=[],
datas=[
('D:/Trial/src/readme_text_files/readme1.txt','readme_text_files'),
('D:/Trial/src/readme_text_files/readme2.txt','readme_text_files'),
], ...........(Rest of the .spec file contents as it is)
或者简单地,您可以直接包含目录本身,如下所示:
datas=[('C:/Users/njv5kor/eclipse-workspace/Trial/src/readme_text_files/','readme_text_files'),
],
在python代码中,我添加了以下代码:
def resource_path(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
file = resource_path("readme_text_files\\readme1.txt")
基本上,pyinstaller将.txt文件捆绑到.py文件并创建一个.exe 有关_MEIPASS plese的详细信息,请参见链接: https://pyinstaller.readthedocs.io/en/v3.3.1/operating-mode.html#how-the-one-file-program-works