编程控制python优化?

tim*_*day 5 python optimization pyglet multiplatform

我一直在玩pyglet.这是很不错的.但是,如果我运行我的代码,这是一个可执行文件(称为game.py),前缀是通常的

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

通过做

./game.py
Run Code Online (Sandbox Code Playgroud)

然后它有点笨重.但是,如果我运行它

python -O ./game.py
Run Code Online (Sandbox Code Playgroud)

要么

PYTHONOPTIMIZE=1 ./game.py
Run Code Online (Sandbox Code Playgroud)

那么它的超顺畅.

我不在乎为什么它在没有优化的情况下运行缓慢; pyglet的文档提到优化禁用了大量的断言以及OpenGL的错误检查,我很高兴将其留在那里.

我的问题是:人们如何分发Python代码以确保最终用户(对调试或修改代码没有兴趣)运行优化版本的代码.当然有一些更好的方法,而不仅仅是告诉人们确保他们在发行说明中使用优化(他们可能无论如何都不会阅读)?

在Linux上,我可以轻松地./game为最终用户提供运行该文件的脚本:

#!/bin/sh
PYTHONOPTIMIZE=1 ./game.py $*
Run Code Online (Sandbox Code Playgroud)

但这不是非常跨平台的.

我有一个想法,我应该能够改变#!线路

#!/usr/bin/env PYTHONOPTIMIZE=1 python
Run Code Online (Sandbox Code Playgroud)

要么

#!/usr/bin/env python -O
Run Code Online (Sandbox Code Playgroud)

但那些似乎没有按预期工作,我不确定他们在Windows上做了什么.

有没有办法从我不知道的代码中控制优化?就像是:

  import runtime
  runtime.optimize(True)
Run Code Online (Sandbox Code Playgroud)

运送多平台python代码的人在这个领域被认为是最佳实践?

S.L*_*ott 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
Run Code Online (Sandbox Code Playgroud)

game.bat

python -O game.py
Run Code Online (Sandbox Code Playgroud)

有趣的是文件是相同的,只有扩展(和文件格式)必须改变,以使各种操作系统愉快.

如果你想要一个真正适合所有人的跨平台,你必须记住Python是一种shell语言.这种事情也有效.

game-startup.py

import subprocess
subprocess.Popen( "python -O game.py" )
Run Code Online (Sandbox Code Playgroud)