gpt4 book ai didi

python - pyInstaller 多次加载脚本

转载 作者:太空狗 更新时间:2023-10-29 20:12:19 25 4
gpt4 key购买 nike

我现在已经设法让 pyinstaller 或多或少正确地运行,只是它打开了太多窗口。它是 pygame 项目,它会每隔一秒左右重新加载整个项目。几秒钟后,我的 PC 充满了游戏窗口,然后一切都停止了。

从命令行运行它,我只能看到打印输出说应用程序开始在命令行窗口中一遍又一遍地粘贴。据我所知,应用程序并没有关闭或退出,只是越来越多。

我调用的启动 pyinstaller 的命令是这样的:

pyinstaller --onedir main_local.py

主文件如下所示:

# Library imports
import pygame

# Project imports
from multiroidal_client import MultiroidalClient
from settings import *
import time

# Main program function
def main():

# Initialise game class
game = MultiroidalClient(SCREEN_SIZE, ('127.0.0.1', 8080))

# Start game loop
game.main_game_loop()


# Execute main function
if __name__ == '__main__':
main()

我尝试注释掉 if __ name __ ... 位以查看是否由于某种原因它正在执行 main 函数并且每次都意外地调用一个副本。当被注释掉时,exec 什么都不做,正如您所期望的那样。

有什么想法吗?我没有包含更多代码,因为它有很多,而且我不确定哪些部分是相关的。如果您需要查看其他内容,请告诉我。

干杯

编辑:我在 game.main_game_loop() 之后添加了一个快速打印,只是为了检查脚本是否跳出了无限游戏循环。没有这样的运气。它正在加载脚本的并行实例,同时运行。

编辑:我查看了 pyinstaller 文档并设法进行了更多调试。不确定它是否相关,但它在这里。这个对话屏幕只是一遍又一遍地重印。我还尝试了 --noupx 选项,它有时显然可以提供帮助 - 没有这样的运气。

enter image description here

最佳答案

多处理!

我尝试了一些更简单的 python 程序,它们都很好地打包了。所以这不是我的方法的问题,而是代码的问题。又想了想,项目中一定有一些不寻常或者难以打包的代码。嗯,也许线程?

我有几个并行运行的线程,它们是多处理线程。谷歌搜索后我发现了这个 magic fix .

您只需在 if __name__ == "__main__" 之后和调用 main() 函数。

if __name__ == '__main__':

# Pyinstaller fix
multiprocessing.freeze_support()

main()

看起来开发多处理模块的人必须包含一个 hack 以允许卡住打包(py2exe、pyinstaller 等)。似乎很奇怪,它没有更顺利地包含在内。如果您保留 freeze_support() 调用,即使您不是从打包代码而不是标准 python 文件运行,它仍然有效。

无论如何,如果您正在卡住/打包代码并且它似乎一遍又一遍地执行自己,请检查您是否正在使用多处理。一个简单的谷歌“多处理 pyinstaller”给出了答案。

仅供引用,这仅适用于 --onedir 模式,--onefile 模式是另一回事,在 Windows 上不受支持。您将不得不深入挖掘才能解决这个问题。

关于python - pyInstaller 多次加载脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32672596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com