Python代码能像Javascript一样压缩吗?

5

我想知道Python代码是否能像JavaScript一样进行压缩/非人类可读。我知道在Python中缩进很重要,其核心理念是易读性,但是否有任何方法允许压缩Python代码?顺便说一下,这是Python 2.7。


(嵌套)列表推导式/生成器表达式。这里有更多信息:http://c2.com/cgi/wiki?ObfuscatedPython - kren470
1
压缩的目的是什么? - Leonardo.Z
可能是Python代码混淆的重复问题。 - falsetru
我建议只发送字节码,即.pyc/.pyo。同时阅读https://dev59.com/AnVC5IYBdhLWcg3wihuv。 - monkut
有趣的问题,但我也想知道压缩的目的。JavaScript 压缩很常见,因为要考虑下载速度。几十千字节是很重要的。据我所知,Python 不会因为下载速度慢而让人发疯。如果你想要混淆代码,那就和压缩有些不同了。 - Paul Draper
显示剩余3条评论
3个回答

4

这里有几种不同的方法可供选择。

Python实际上提供了缩小代码的机会,使用分号;可以在一行中写入多个表达式。这是Python语法中鲜为人知且很少使用的一个元素。

例如:

 if x > y:
     x += y
     print y
 else:
     y += x
     print x

可以压缩为:

 if x>y:x+=y;print y;
 else:y+=x;print x;

有很多这样的例子,您也可以删除注释,并使用三元运算符进一步混淆简单代码。 ; 消除了大量空格,但还有许多可以进行的较小优化。
有一些库的示例可以为您执行此操作,请参见此处此处此处
请记住,这些都不会完全混淆您的代码,以至于无法恢复。任何足够有动力的人都将能够从中反向工程您的源代码,即使未经记录。即使您只分发 .pyo .pyc 文件,这仍然是正确的。 Python字节码通常不比用于生成它的源代码小得多,并且在很大程度上可以轻松地进行反向工程。不要犯认为分发 .pyc 将完全保护您的源代码的错误。
编辑:如果您要将它们打包为独立的二进制可执行文件,则可能需要查看cx_Freeze。它可能更接近您要寻找的内容,并且很难(如果不是不可能)进行反向工程。

1
+1 这可能是我正在寻找的东西。谢谢。 - Jace Cotton

0

这并不会使代码混淆(从字节码中 Python 可以很容易地反向工程化),也不能节省太多空间。例如,将 stdlib 中的 Decimal 库编译只能减少其占用的空间量 5%。 - reem

0

不像通常由浏览器执行并需要提供JavaScript源代码的JavaScript。

你不必提供Python代码,可以提供编译后的二进制文件。有许多工具可以完成这项工作,例如py2exePyinstallercx_Freeze。客户也受益了,因为他们不需要安装Python甚至了解Python的任何内容。

尽管与Java、C、C++代码相比,编译后的Python代码更容易被反编译,但是比压缩的源代码要好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接