部署python应用程序

bph*_*bph 11 python deployment

是否有可能部署python应用程序,以便您不释放源代码,而您不必确定客户是否安装了python?

我想也许有一些安装过程可以从.pyc文件和包含解释器的共享库或类似的东西运行python应用程序?

基本上我渴望获得像Python这样的语言的开发优势 - 高生产率等,但是不能完全看到如何将它专业地部署到客户,在那里你不知道机器是如何设置的,你肯定是无法提供来源.

如何在python中开发专业软件公司(或者答案是他们没有)?

Mik*_*ham 18

  1. 您可以合法地保护源代码,而不是技术保护.分发py文件确实不是什么大问题.这里唯一的技术解决方案是不发布您的程序(这些日子实际上变得越来越流行,因为软件是通过互联网提供的,而不是更频繁地在本地完全安装.)

  2. 如果您不希望用户必须安装Python但想要运行Python程序,则必须捆绑Python.你这样做的抵抗对我来说似乎很奇怪.Java程序必须捆绑或预测JVM的存在.C程序必须捆绑或预测libc的存在(通常是后者)等.使用你需要的东西没什么好看的.

  3. 专业的Python桌面软件捆绑了Python,可以通过像py2exe/cx_Freeze这样的东西来做同样的事情,或者通过嵌入Python(在这种情况下,Python作为库而不是可执行文件出现).前一种方法通常更强大,更强大.

  • @Hiett,我相信你的评论"有些情况下你必须小心保护技术观点来源,例如国防部门." 是错误的,危险的.运送您的程序试图隐藏您的来源是一个失败的主张.您的非源代码分发总是可以反编译或以其他方式编辑或重用,并且在Python中反编译尤为简单.在防御等安全关键行业中,更重要的是不要有这样的安全漏洞.唯一的技术解决方案是不要将程序交给某人. (3认同)
  • @Hiett:当你使用像py2exe这样的东西时,你并不是"要求用户安装Python".您要求用户安装*您的软件*...**包括Python.正如我认为迈克在第2点非常清楚,所有软件都需要某种运行时.Java示例特别有说服力.谁会称Java为"不专业"的语言?然而,Java软件通常与Java运行时环境捆绑在一起(安装程序会根据需要为您安装),并且JRE比Python大得多! (2认同)

Ole*_*pin 7

是的,可以制作安装包.寻找py2exe,cx_freeze和其他人.

不,不可能保持源代码完全安全.总有办法反编译.如果有人想要,
可以从.pyc文件中轻松获取原始源代码.代码混淆会使代码更难做.


ees*_*ada 5

我很惊讶之前没有人提到这一点,但Cython似乎是解决这个问题的可行方法。这将需要你的Python代码和transpile成CPython的兼容C代码。您还会获得小幅速度提升(上次检查时约为 25%),因为它将被编译为本地机器代码,而不仅仅是 Python 字节代码。您仍然需要确保用户安装了 Python(通过将其作为先决条件推送给用户进行处理,或者将其捆绑为安装程序过程的一部分)。此外,您的应用程序中至少需要有一小部分是纯 Python 的:主函数的钩子。

所以你需要一些基本的东西:

import cython_compiled_module

if __name__ == '__main__':
    cython_compiled_module.main()
Run Code Online (Sandbox Code Playgroud)

但这实际上没有泄露任何实现细节。我认为使用 Cython 应该满足问题中的标准,但它也引入了在 C 中编译的额外复杂性,这失去了 Python 的一些简单的跨平台特性。这是否值得取决于你。

正如其他人所说,即使是生成的编译后的 C 代码也可以通过一点努力来反编译,但它可能更接近您最初希望的混淆类型。