首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态编译Python

静态编译Python
EN

Stack Overflow用户
提问于 2014-07-19 22:58:23
回答 3查看 436关注 0票数 1

我可以用

代码语言:javascript
复制
python -m py_compile mytest.py

它将字节编译文件。通过阅读其他一些文档,我的印象是它字节编译了导入的任何模块。但是,如果我更改它导入的任何文件,我就会看到更改的功能。有什么方法可以完全编译它导入的python脚本和模块,这样对原始文件的任何更改都不会反映出来吗?为了安全起见,我想要这样做,本质上是创建一个“受信任的”版本,它不能通过改变它调用的任何模块的功能而被颠覆。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-20 02:36:16

Freeze/Bundle:

  • bbfreeze冻结 cross-platform
  • 冰冻 cross-platform
  • py2exe窗口
  • py2app OS X
  • pyinstaller cross-platform

Cryptography:

假设运行“脚本”的“流程”是安全的,并且不能被篡改:

  • 创建脚本的安全散列并记录它们(例如: SHA1)
  • 在执行“脚本”时,确保它们的密码散列匹配(确保它们没有被篡改)。

对于安全协议和api,一种常见的方法是使用HMAC

票数 1
EN

Stack Overflow用户

发布于 2014-07-19 23:01:18

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

如果您想要一个单文件Python程序,可以使用从压缩文件中运行

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

票数 2
EN

Stack Overflow用户

发布于 2014-07-28 12:33:38

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24845746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档