当前位置: 首页 > 知识库问答 >
问题:

使用onefile选项在Pyinstaller中添加数据文件

孙德宇
2023-03-14

我试图添加一个图像到一个文件的PyInster产生。我读过很多问题/论坛,比如这个和那个,但仍然不起作用。

我知道对于一个文件操作,Pyinstller会产生一个临时文件夹,可以通过sys访问。MEIPASS.然而,我不知道在我的脚本中应该在哪里添加这个sys。MEIPASS.

请显示以下内容:

1-在哪里和如何sys.MEIPASS应该添加?在python脚本中,还是在规范文件中?

2-要使用的确切命令是什么?我试过了

pyinstaller --onefile --windowed --add-data="myImag.png;imag" myScript.py

pyinstaller --onefile --windowed myScript.py

然后添加('myImag.png','imag')到规范文件,然后运行

pyinstller myScript.spec

都没有奏效。

注意:我有Windows7下的python 3.6

共有3个答案

何哲
2023-03-14

我尝试更改了python脚本的工作目录,但似乎可以:

import os 
import sys

os.chdir(sys._MEIPASS)
os.system('included\\text.txt')

我的pyInster命令:

pyinstaller --onefile --nowindow --add-data text.txt;included winprint.py --distpath .
莫逸仙
2023-03-14

我使用了命令提示符命令而不是命令行。规格

该命令排除Shapely,然后将其添加回(我猜这调用了不同的导入过程)。这显示了如何添加文件夹而不仅仅是文件。

pyinstaller --clean --win-private-assemblies --onefile --exclude-module shapely --add-data C:\\Python27\\Lib\\site-packages\\shapely;.\\shapely --add-data C:\\Python27\\tcl\\tkdnd2.8;tcl main.py
南门洋
2023-03-14

当使用PyInstaller打包到一个文件时,运行. exe会将所有内容解压到TEMP目录中的一个文件夹中,运行脚本,然后丢弃临时文件。临时文件夹的路径随着每次运行而改变,但是对其位置的引用作为sys添加到sys中。_MEIPASS

为了利用这一点,当您的Python代码读取任何也将打包到应用程序中的文件时。exe,您需要将文件位置更改为位于sys下_MEIPASS。换句话说,您需要将其添加到python代码中。

下面是一个示例,当打包到单个文件时,使用您引用的链接中的代码将文件路径调整到正确的位置。

# data_files/data.txt
hello
world

# myScript.py
import sys
import os

def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

def print_file(file_path):
    file_path = resource_path(file_path)
    with open(file_path) as fp:
        for line in fp:
            print(line)

if __name__ == '__main__':
    print_file('data_files/data.txt')

使用以下选项运行PyInstaller包文件:

pyinstaller --onefile --add-data="data_files/data.txt;data_files" myScript.py

构建myScript。exe,可以正确运行并打开和读取打包的数据文件。

 类似资料:
  • 问题内容: 我正在尝试使用构建一个包含文件和图标的单文件EXE。我一生无法忍受。 如果我这样做了,那么一切都很好。当我使用时,它(在运行编译的EXE时)找不到引用的其他文件。它找到DLL和其他所有东西,只是找不到两个映像。 我查看了运行EXE时生成的,并且文件确实在其中。当我将EXE放到该临时目录中时,它会找到它们。很困惑。 这就是我添加到.spec文件中的内容 我还要补充一点,我也尝试过不要将它

  • 问题内容: 情况 我在Windows上使用Pyinstaller制作项目的.exe文件。 我想使用option来获得干净的结果和易于分发的文件/程序。 我的程序使用一个文件来存储配置选项。该文件可以由用户定制。 问题 使用选项Pyinstaller将所有声明的“数据文件”放入单个文件文件中。 我已经看到了这个请求,但它给istructions添加一个包文件 的onefile内部 ,而不是外部的,在

  • 我试图捆绑我的py脚本作为一个. exe使用PyInstaller 2.0。我可以捆绑脚本,但是在我的脚本中,我需要打开一个应该捆绑在exe中的文件(所以它是可移植的)。我做这个有困难... 在我的生活中。是的,我有 我使用PyInstaller 2.0,这在我的电脑上工作正常,但是如果我把exe转移到另一台电脑上,它就不能工作了...PyInstaller 2.0非常新,所以上面的文档很少,出版

  • 我有一个gui程序,我用它来处理扫描的pdf,并寻找带有二维码的页面,这告诉程序在哪里可以将pdf分成多个文件。我的程序本质上是一个函数列表,当每个步骤完成时,这些函数会一个接一个地相互调用。 我遇到麻烦的地方是当我试图用PyInstaller将它编译成exe时。我的程序作为python文件运行良好,并且在指定--noConsole和--onefile选项时也能正常工作。我不能工作的是当我两者都用

  • 问题内容: 现在,我正在使用Pyinstaller。我有一个脚本,可以从img文件夹中获取图像。 我生成.exe的脚本是 问题是仅生成.exe文件,但整个文件夹/ img被忽略。 问题:为了自动获取.exe文件+ / img文件夹,我需要在上一行中添加哪种附加语法? 更新12/18/2013 我的意思是:执行pyinstaller.py脚本并包含所有参数后,我必须在/ dist文件夹中看到:.ex

  • 问题内容: 我希望这个问题很简单。 我有一个像这样的普通盒子 我可以获取选定的值(通过使用)和选定项的显示值(通过使用)。 但是,如何在标签中像附加值一样存储呢?我希望能够做类似的事情并获取属性的值(在示例中为3.2)。 问题答案: HTML标记 码 通过使用HTML5中的数据属性,您可以以语法上有效的方式向元素添加额外的数据,该方式也可以从jQuery轻松访问。