bph*_*bph 11 python deployment
是否有可能部署python应用程序,以便您不释放源代码,而您不必确定客户是否安装了python?
我想也许有一些安装过程可以从.pyc文件和包含解释器的共享库或类似的东西运行python应用程序?
基本上我渴望获得像Python这样的语言的开发优势 - 高生产率等,但是不能完全看到如何将它专业地部署到客户,在那里你不知道机器是如何设置的,你肯定是无法提供来源.
如何在python中开发专业软件公司(或者答案是他们没有)?
Mik*_*ham 18
您可以合法地保护源代码,而不是技术保护.分发py文件确实不是什么大问题.这里唯一的技术解决方案是不发布您的程序(这些日子实际上变得越来越流行,因为软件是通过互联网提供的,而不是更频繁地在本地完全安装.)
如果您不希望用户必须安装Python但想要运行Python程序,则必须捆绑Python.你这样做的抵抗对我来说似乎很奇怪.Java程序必须捆绑或预测JVM的存在.C程序必须捆绑或预测libc的存在(通常是后者)等.使用你需要的东西没什么好看的.
专业的Python桌面软件捆绑了Python,可以通过像py2exe/cx_Freeze这样的东西来做同样的事情,或者通过嵌入Python(在这种情况下,Python作为库而不是可执行文件出现).前一种方法通常更强大,更强大.
是的,可以制作安装包.寻找py2exe,cx_freeze和其他人.
不,不可能保持源代码完全安全.总有办法反编译.如果有人想要,
可以从.pyc文件中轻松获取原始源代码.代码混淆会使代码更难做.
我很惊讶之前没有人提到这一点,但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 代码也可以通过一点努力来反编译,但它可能更接近您最初希望的混淆类型。