静态编译Python

时间:2014-07-19 22:58:24

标签: python compilation

我可以用

python -m py_compile mytest.py

它将对文件进行字节编译。从阅读其他一些文档,我的印象是它对任何导入的模块进行了字节编译。但是,如果我更改它导入的任何文件,我会看到更改的功能。有没有办法完全编译它导入的python脚本和模块,以便对原始文件的任何更改都不反映?我想出于安全目的这样做,本质上是创建一个“可信”版本,不能通过更改它调用的任何模块的功能来破坏它。

3 个答案:

答案 0 :(得分:2)

如果编译为字节码,然后删除源文件,则字节码无法更改。但如果有人能够更改您机器上的源文件,他们也可以更改您机器上的字节码文件。我不认为这会给你任何实际的安全感。

如果您需要单文件Python程序,可以run from a zip file

另一个选择是使用cx_freeze或类似程序将程序编译为本机可执行文件。

答案 1 :(得分:2)

我们通过使用signet http://jamercee.github.io/signet/开发自己的客户加载器来解决这个问题。 Signet将扫描你的python源和它的依赖项并计算sha1哈希值,它嵌入到加载器中。您将加载程序和脚本交付给用户,并提供运行加载程序的说明。在调用时,它会重新计算哈希值,如果它们匹配,则控制权将转移到您的脚本中。 Signet还支持代码签名和PE验证。

答案 2 :(得分:1)

<强>冻结/软件包:

<强>密码学:

假设您运行“脚本”的“过程”是安全的,不会被篡改:

  • 创建脚本的安全哈希并记录它们(例如:SHA1
  • 执行“脚本”时,请确保其加密哈希值匹配(确保它们未被篡改)。

安全协议和apis的常见方法是使用HMAC