我花了最后3个小时试图找出是否可以在没有交互模式的情况下禁用或构建Python,或者我如何才能获得更小的python可执行文件的大小.
正如你可以猜到的那样是嵌入式设备,在交叉编译之后,Python的大小约为1MB,这对我来说太过分了.
现在的问题是:
是否有可能缩小Python可执行文件?也许要禁用交互模式(在命令行上启动Python程序).
我查找了配置选项并尝试了其中一些,但它不会对我的可执行文件产生任何更改.
我用gcc的优化选项编译它,它已经被剥离了.
这个问题可能在某种程度上受到了使用Python进行嵌入式项目的人的启发 ; 所以任何人使用一些Scheme版本或Common Lisp(如ECL)进行免费/ oss /商业项目?
就个人而言,我使用(并且仍在使用)TinyScheme用于需要某些嵌入式语言的个人项目,主要是因为非常容易嵌入(对不起Python爱好者,在那里,这非常痛苦,特别是在我从TinyScheme学到事情可以简单之后) .
我在嵌入式平台上使用旧版本的python(在Telit平台上使用Python 1.5.2+).我遇到的问题是我将字符串转换为十六进制的函数.这很慢.这是功能:
def StringToHexString(s):
strHex=''
for c in s:
strHex = strHex + hexLoookup[ord(c)]
return strHex
Run Code Online (Sandbox Code Playgroud)
hexLookup是一个查找表(python列表),包含每个字符的所有十六进制表示.
我愿意尝试一切(一个更紧凑的功能,一些我不知道的语言技巧).更清楚的是基准测试(该平台的分辨率为1秒):
N是要转换为十六进制的输入字符数,时间以秒为单位.
是的,我知道,这很慢......但如果我能获得1秒或2秒的时间,这将是一个进步.
所以任何解决方案都受到欢迎,尤其是那些了解python性能的人.
谢谢,
尤利安
PS1 :(在测试提供的建议后 - 保持ord通话):
def StringToHexString(s):
hexList=[]
hexListAppend=hexList.append
for c in s:
hexListAppend(hexLoookup[ord(c)])
return ''.join(hexList)
Run Code Online (Sandbox Code Playgroud)
通过此功能,我获得了以下时间:1/2/3/5/12/19/27(显然更好)
PS2(无法解释,但速度非常快)非常感谢Sven Marnach的想法!!!:
def StringToHexString(s):
return ''.join( map(lambda param:hexLoookup[param], map(ord,s) ) ) …Run Code Online (Sandbox Code Playgroud)