如何用pyinstaller打包资源文件和.py文件成一个独立的.exe文件?

我使用pygame模块。将上述文件打包成文件夹时无运行错误,但当打包成.exe文件时(-F)无法运行,显示FileNotFoundError。可能是文件路径有误?
我用命令生成了.spec文件:pyi-makespec -F 'main.py' -w -i 'materials/car.ico' -n 'Car v0.1'
之后修改了.spec文件(粗体为修改部分)

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(
    **['main.py','object_e.py'],
    pathex=["C:\Game_Designs\game\Car"],**
    binaries=[],
   ** datas=[("materials", "materials")],**
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
   pyz,
  a.scripts,
  a.binaries,
  a.zipfiles,
  a.datas,
  [],
  **name='Car_v0.1',**
  debug=False,
  bootloader_ignore_signals=False,
  strip=False,
  upx=True,
  upx_exclude=[],
  runtime_tmpdir=None,
  console=False,
  disable_windowed_traceback=False,
  argv_emulation=False,
  target_arch=None,
  codesign_identity=None,
  entitlements_file=None,
  **icon=['materials\\car.ico'],**
)

之后用pyinstaller 'Car_v0.1.spec'命令生成.exe文件,出现了FileNotFoundError:

img


出现问题的代码行:

img


我的架构

img

这个是因为 pyinstaller 不会解析资源的路径。你的可执行文件在 dist 文件夹里,而资源路径是 materials/***,就会尝试在 dist 文件夹里查找这个资源路径,所以就会出错。
把 exe 粘贴到 main.py 同一目录下,或者把 materials 粘贴到 dist 里面就行了。

【以下回答由 GPT 生成】

我可以帮助你解决这个问题。以下是关于如何使用pyinstaller将资源文件和.py文件打包成一个独立的.exe文件的步骤:

步骤一:生成.spec文件 首先,使用pyi-makespec命令生成一个.spec文件。在这个步骤中,你需要指定主要的.py文件、依赖的其他.py文件、资源文件的路径(绝对路径或相对路径)以及其他选项(如图标文件)。

pyi-makespec -F main.py -w -i materials/car.ico -n "Car v0.1"

这个命令将生成一个.spec文件,其中包含了你的打包选项和配置。

步骤二:修改.spec文件 接下来,你需要打开生成的.spec文件并进行修改。找到以下代码段:

a = Analysis(
    ['main.py', 'object_e.py'],
    pathex=['C:\Game_Designs\game\Car'],
    binaries=[],
    datas=[],
    ...
)

datas中添加你想要包含的资源文件。在你的例子中,将datas修改为以下内容:

datas=[('materials', 'materials')],

这样,打包时会自动将materials文件夹下的所有文件包含进去。

步骤三:使用.spec文件打包成.exe文件 最后,使用pyinstaller命令将.spec文件转换为独立的.exe文件。

pyinstaller Car_v0.1.spec

这个命令会根据.spec文件中的配置将所有的文件打包成一个可执行的.exe文件。

希望这个解决方案对你有帮助。如果你还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

这个问题在我自作一个文件时出现了多次,我经过多次实验做出来了,推荐你看我的一篇文章http://t.csdn.cn/tvqXy,直接看打包那部分,如果看不懂的话,可以询问我,主要是打包时,没有将文件的所有文件包含,需要自己引入资源的具体链接,或者在相同目录下,使用pyinstaller自己的特殊的打包命令可以将同一目录下的文件所有打包进去,具体可以看我的文章