python优化的程序控制?

2024-09-19 23:28:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在玩pyglet。很不错。但是,如果我运行我的代码,它在一个可执行文件中(调用它游戏.py)以通常的前缀

#!/usr/bin/env python

通过做

^{pr2}$

那就有点笨重了。但如果我用

python -O ./game.py

或者

PYTHONOPTIMIZE=1 ./game.py

那么它的超级光滑。在

我不在乎为什么没有优化它运行得很慢;pyglet的文档提到优化会禁用许多断言和OpenGL的错误检查,我很高兴就此结束。在

我的问题是:分发Python代码的人如何确保最终用户(对调试或修改代码没有兴趣)运行代码的优化版本。当然,除了告诉人们确保他们在发行说明中使用了优化,还有更好的方法(他们可能根本就不会读到这一点)?在

在Linux上,我可以很容易地提供./game脚本来为最终用户运行文件:

#!/bin/sh
PYTHONOPTIMIZE=1 ./game.py $*

但这不是很跨平台。在

我有一个想法,我应该能够将#!行改为

#!/usr/bin/env PYTHONOPTIMIZE=1 python

或者

#!/usr/bin/env python -O

但这些功能似乎并不像预期的那样有效,而且我不确定它们在Windows上能做什么。在

有没有什么方法可以从我不知道的代码中控制优化? 比如:

  import runtime
  runtime.optimize(True)

发布多平台python代码的人认为这方面的最佳实践是什么?在


Tags: 方法代码文档pyenvgame可执行文件游戏
2条回答

回答你的问题(与解决你的问题相反,S.Lott做得很好),我想很多时候发布Python代码的人不会担心这个问题,因为优化标志很少有任何效果。我相信Pyglet是我多年来使用Python所听到的唯一例外。引用Python docs“优化器目前没有多大帮助;它只删除assert语句”。

“在Linux上,我可以很容易地提供一个./game脚本来为最终用户运行文件:”

正确。在

“但这不是很跨平台。”

一半正确。有两种shell语言很重要。标准Linux“sh”和非标准Windows“bat”(a/k/a命令提示符)现在只有这些了。[当我还是个孩子的时候,有开放的VMS-DCL和Data-General怪异的shell语言和RSX-11以及各种很棒的东西。感谢上帝给了Posix标准。]

在游戏.sh在

python -O game.py

在游戏.bat在

python -O game.py

有趣的是,这些文件都是一样的,只有扩展名(和文件格式)必须更改才能使各种操作系统满意。在

如果您希望跨平台的true一刀切,您必须记住Python是一种shell语言。这种事也行。在

游戏-启动.py在

import subprocess
subprocess.Popen( "python -O game.py" )

相关问题 更多 >