Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pygame的Pyinstaller_Python_Pygame_Pyinstaller - Fatal编程技术网

Python pygame的Pyinstaller

Python pygame的Pyinstaller,python,pygame,pyinstaller,Python,Pygame,Pyinstaller,我曾多次尝试使用PyInstaller捆绑我的Python2程序,但它似乎从未与Pygame模块一起工作过。我已经看到了很多关于这个话题的其他问题,但我找不到任何有用的答案 有人知道这个问题的解决办法吗 我正在Ubuntu 14.10上尝试这样做 -编辑- 更具体地说: “永不工作”意味着当我运行PyInstaller并构建应用程序时,它似乎工作并使应用程序正常运行。当您尝试运行应用程序时,什么也不会发生。我建议尝试另一个程序,如py2exe,来捆绑python程序。我目前没有遇到任何问题。他们

我曾多次尝试使用PyInstaller捆绑我的Python2程序,但它似乎从未与Pygame模块一起工作过。我已经看到了很多关于这个话题的其他问题,但我找不到任何有用的答案 有人知道这个问题的解决办法吗

我正在Ubuntu 14.10上尝试这样做

-编辑-

更具体地说:


“永不工作”意味着当我运行PyInstaller并构建应用程序时,它似乎工作并使应用程序正常运行。当您尝试运行应用程序时,什么也不会发生。

我建议尝试另一个程序,如py2exe,来捆绑python程序。我目前没有遇到任何问题。他们在基于cmd的过程中有很多很好的youtube视频。我在使用pyinstaller时遇到了一些个人问题,如果你的程序没有缺陷,我认为这只是一个错误。

我在pyinstaller文档中搜索了很多,以使我自己的游戏正常运行。我对Ubuntu了解不多,但我在Windows上运行了所有东西,应该非常相似。这里的关键是让PyInstaller用Python代码打包您的资源(图像、声音等)。最好的发行版是在目录中使用
pyinstaller--onefile main.py
console命令来获取单个可执行文件。PyInstaller将创建一个dist文件夹和一个main.spec文件。.spec文件包含PyInstaller用于生成可执行文件的所有选项。对于
--onefile
可执行文件,它应该如下所示:

# -*- mode: python -*-

block_cipher = None

a = Analysis(['..\\src\\bitmessagemain.py'],
         pathex=['C:\\example\\pyinstaller\\bitmessagemain'],
         binaries=None,
         datas=None,
         hiddenimports=[],
         hookspath=None,
         runtime_hooks=None,
         excludes=None,
         win_no_prefer_redirects=None,
         win_private_assemblies=None,
         cipher=block_cipher)

pyz = PYZ(a.pure, a.zipped_data,
         cipher=block_cipher)
exe = EXE(pyz,
      a.scripts,
      a.binaries,
      a.zipfiles,
      a.datas,
      a.binaries, 'BINARY')],
      name='bitmessagemain',
      debug=False,
      strip=None,
      upx=True,
      console=False , icon='src\\images\\can-icon.ico')
请确保运行PyInstaller一次,让它创建.spec文件,即使生成的可执行文件不起作用

a
是一个对象,它收集要放入可执行文件的内容。您想在
datas=
部分中添加您的ressource文件夹。为此,请创建一个列表:

added_files = [
     ( 'data', 'data' ),
     ( 'sfx/*.mp3', 'sfx' ),
     ( 'src/README.txt', '.' )
     ]
本例中的第一行添加与您
main.spec
main.py
位于同一文件夹中的文件夹
data
的所有内容,并将其添加到可执行文件中的
data
文件夹中。您希望保持路径正常工作,因此元组的两个条目通常应该相同。第二行将sfx中的所有
.mp3
文件添加到可执行文件中的sfx文件夹中,依此类推。将您的所有资源添加到此列表中,并注意保持路径有效

然后可以修改.spec(标准python代码):

最后一个非常重要的步骤是在main.py的开头添加这两行代码:

if getattr(sys, 'frozen', False):
    os.chdir(sys._MEIPASS)
这里的诀窍是,当您运行可执行文件时,PyInstaller会将您的所有数据文件解压缩到一个隐藏的_MEIPASS文件夹中。您希望将当前目录设置为此文件夹,以便代码找到您的资源,并且路径保持有效

最后,我建议您对代码中的所有路径使用
os.path.join
函数。这将使路径可移植到其他平台

另一方面,如果使用--onedir选项,请执行相同的操作,但添加两行:

if getattr(sys, 'frozen', False):
    os.chdir(os.path.dirname(sys.executable))
如果执行此操作,并且双击(在Windows中)时可执行文件立即关闭,则需要将
console=False
更改为
console=True
行,然后在StartMenu的搜索字段中键入cmd/k completeTaphtoYourExecutable。这将运行您的.exe并保持控制台打开,以便您可以查看错误日志。它可能会要求您提供一些忘记包含的文件,这样您可以将其添加到.spec中,使用
pyinstaller main.spec重新生成.exe,然后重试


希望这对其他人也有帮助,对于PyInstaller+Pygame来说,web上的信息非常模糊。

是的,我发现了另一个名为Nuitka的应用程序,它可以与任何Python项目配合使用。非常感谢。经过大量的尝试和错误,我得到了我的程序运行与您的解决方案。我还想补充一点,无论出于何种原因,默认的pygame字体似乎不能作为exe文件使用
Font=pygame.Font.SysFont(无,30)
应更改为
Font=pygame.Font.Font(“freesansbold.ttf”,20)
,并且
freesansbold.tff
文件应添加到工作
数据
目录和.spec文件
,('data/freesansbold.ttf','data'))
对于其他试图实现这一点的人,我建议仔细阅读这篇文章,因为其中有许多重要的细节和区别。出于某种原因,如果name参数(第一个)为None或字体名称不在系统字体列表中,pygame.font.SysFont将使exe崩溃。
if getattr(sys, 'frozen', False):
    os.chdir(os.path.dirname(sys.executable))