我已经完成了相关的SO问题,但我仍然遇到了问题。如何使用pyinstaller将带有图像的程序打包到onefile中?

时间:2012-10-20 01:30:09

标签: python pyinstaller

我搜索了我的问题,它引导我到这里:Bundling data files with PyInstaller (--onefile)

所以我添加了接受的答案代码,

def resource_path(relative):
    return os.path.join(
        os.environ.get(
            "_MEIPASS2",
            os.path.abspath(".")
        ),
        relative
    )


# in development
>>> resource_path("app_icon.ico")
"/home/shish/src/my_app/app_icon.ico"

# in deployment
>>> resource_path("app_icon.ico")
"/tmp/_MEI34121/app_icon.ico"

但我仍然收到cannot locate imageName错误。除了它列出_MEIPASS文件夹。

有什么我想念的吗?

如果需要更多信息,请与我们联系。就我而言,pyinstaller是黑魔法,所以我不确定相关信息是什么。

1 个答案:

答案 0 :(得分:0)

我也陷入了这一步。然后我读了pyinstaller.py文件,并以某种方式成功解决了它。通过添加resource_path()方法修改源文件(就像您已经完成的那样),您必须执行以下步骤:

  1. 运行:

    python utils\Makespec.py --onefile your_script_name.py 
    
  2. 接下来,编辑从第一步创建的your_script_name文件夹中的your_script_name.spec文件。添加这些行(调整图像名称)

    a.datas +=  [('relative path from pyinstaller folder','actual path to image file','DATA')]
    

    例如像这样,

    a.datas += [('calvin.jpg','C:\\projects\\python\\calvin.jpg','DATA')] 
    

    注意:当我将图像放在子文件夹中时,我无法使其正常工作,因此我将它们保存在pyinstaller文件夹中。

  3. 然后最后运行:

    python pyinstaller.py your_script_name\your_script_name.spec
    

    这是使用您在第二步中编辑的.spec文件运行pyinstaller。

  4. 希望这有助于消除您的所有疑虑:)