使用pyinstaller将.py文件和.txt文件合并为.exe文件

问题描述 投票:1回答:1

我有一个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.txt ','readme_text_files / readme2.txt','readme_text_files'),]

以上代码已添加到.spec文件,因此,我认为在运行时,必须将readme_text_files复制到存在.exe的文件夹中:pyinstaller spec_filename.spec

python pyinstaller pyi
1个回答
0
投票

我希望将.txt文件与.exe文件捆绑在一起,因此我执行了以下操作:

  1. 我以下列方式编辑了.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'),
                        ],
    
  2. 在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

© www.soinside.com 2019 - 2024. All rights reserved.