如何解决“警告:隐藏的导入”错误pygame._view“未找到!”我将.py程序转换为.exe之后?

时间:2019-07-15 21:15:24

标签: python pygame pyinstaller

将我的.py程序转换为.exe之后,我的程序停止运行。我得到了WARNING: Hidden import information pygame._view "not found!"。我试图导入模块,但是不存在。我在互联网上搜索解决方案,但没有发现任何有用的信息。许多答复说,在较新的pygame版本中不存在此问题,其余答案无济于事。但这是最新版本。有关Pygame和Pyinstaller以及我的代码的更多信息:https://repl.it/@Kadinus/MyGame! 在此站点上,我的.exe程序可以运行,但是如果我直接在PC上启动它,则无法运行。 Pygame版本:1.9.6 Pyinstall版本:3.5

import pygame

print ('Stage 1')

class Person():
    def __init__(self):
        self.x = 275
        self.Y = 275
        self.square = pygame.Rect(275, 275, 25, 25)
        self.font = pygame.font.Font(None, 40)
        #'self.massage = None' is written for example.
        self.massage = None

    def draw (self):
        pygame.draw.rect(window, (0, 0, 0), self.square, 3)

        text = self.font.render('Hi', 300, (0, 0, 0), (255, 200, 200))
        textpos = text.get_rect(x=10, y=10)
        window.blit(text, textpos)

pygame.init()

#Create the window and set its size.
window = pygame.display.set_mode (( 600, 600 ))
window.fill((255, 255, 255))

exit = False

print ('Stage 2')

#--------The problem is here--------

person = Person()

#-----------------------------------

print ('Stage 3')

while exit == False :
    pygame.time.delay(5)

        person.draw()

        #Check if the user closes the window.
        for event in pygame.event.get() :
                if event.type == pygame.QUIT :
                    exit = True

        pygame.display.update()

print ('Stage 4')

我希望代码可以无错误地运行到最后。

1 个答案:

答案 0 :(得分:1)

实际上,我无法重现您的错误。但是我很难冻结使用pygame的应用程序,这也可以解决您的问题。

有时候,更好的方法是手动包含模块。首先,您需要使用exclude-module排除模块,并使用Tree类将模块手动提供给最终的可执行文件。同样,使用这种方法,某些Python库会丢失,需要由hidden-importTree添加。例如,在这里我将xml添加为Tree,将queue添加为hidden-import

import`. Use below spec file:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['script.py'],
             pathex=['C:\\Users\\Rahimi\\Desktop\\test'],
             binaries=[],
             datas=[],
             hiddenimports=['queue'],
             hookspath=[],
             runtime_hooks=[],
             excludes=['pygame'],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
a.datas += Tree("<python_path>/Lib/site-packages/pygame/", prefix= "pygame")
a.datas += Tree("<python_path>/lib/xml/", prefix= "xml")
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='script',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=False,
          runtime_tmpdir=None,
          console=True )

切记根据当前环境编辑路径。最后,使用以下命令生成可执行文件:

pyinstaller script.spec