我一直在玩pyglet。这是很不错的。但是,如果我运行我的代码,这是一个可执行文件(称为game.py),前缀为通常的
#!/usr/bin/env python
做
./game.py
然后它有点笨重。但如果我用运行它
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代码的人在这方面的最佳做法是什么?
答案 0 :(得分:14)
“在Linux上我可以轻松提供./game脚本来为最终用户运行该文件:”
正确。
“但这不是非常跨平台的。”
半正确。正好有两种shell语言很重要。标准的Linux“sh”和非标准的Windows“bat”(a / k / a cmd.exe),现在都是如此。 [当我还是个孩子的时候,有Open VMS DCL和Data General的怪异shell语言和RSX-11以及各种各样的好东西。感谢上帝的Posix标准。]
game.sh
python -O game.py
game.bat
python -O game.py
有趣的是文件是相同的,只需要更改扩展名(和文件格式)以使各种操作系统满意。
如果您想要 true 一个适合所有人的跨平台,您必须记住Python是一种shell语言。这种事情也有效。
game-startup.py
import subprocess
subprocess.Popen( "python -O game.py" )
答案 1 :(得分:2)
回答你的问题(反对修复你的问题,而S. Lott做得很好),我认为很多时候发布Python代码的人都不担心这个问题,因为优化标志很少有任何影响。我相信Pyglet是我多年来使用Python时唯一的例外。引用Python docs,“优化器当前没有多大帮助;它只删除断言语句”。