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

时间:2019-10-20 07:09:20

标签: python pyinstaller pyi

我有一个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

1 个答案:

答案 0 :(得分: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