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