如何打包和出售Django应用?

42 投票
7 回答
18978 浏览
提问于 2025-04-11 09:23

我现在正在为我的客户托管一个自己开发的Django应用,但我开始考虑把这个应用卖给别人,让他们自己托管。

我想问的是:我该如何打包和出售这个Django应用,同时保护它的代码不被盗用或复制呢?直接分发一堆.py文件听起来不是个好主意,因为我卖给他们的人也可能会复制这些文件,然后传给别人。

我觉得在这个问题上,可以假设所有购买的人都会使用相同的(LAMP)环境。

7 个回答

14

我会这样做:

  1. 把所有代码加密
  2. 写一个安装程序,这个程序会联系服务器,发送机器的主机名和许可证文件,然后获取解密密钥,接着解密代码并编译成Python字节码
  3. 在安装程序里加一个模块,这个模块在导入时会检查机器的主机名和许可证文件,如果不匹配就会停止运行

这样用户只需要在主机名改变或者第一次安装时联系服务器,但你就能多一层安全保护。你可以把主机名改得复杂一些,但其实没必要——想要盗版的人总会找到办法,但像这样的简单机制可以让诚实的人保持诚实。

15

你可以把整个应用打包成一个亚马逊机器实例(AMI),然后让他们在亚马逊EC2上运行你的应用。这个方案的好处是,亚马逊会为你处理账单问题,而且因为你分发的是整个机器的镜像,你可以确保所有客户使用的都是相同的LAMP环境。AMI就是一个加密的机器镜像,可以根据你的需求进行配置。

你可以让亚马逊以一次性费用、按使用量收费或者按月收费的方式来向客户收费。

当然,这个方案要求你的客户在亚马逊上托管他们的应用,并支付相应的费用。

63

别试图去混淆或者加密代码——这根本没用。

我建议把你的Django应用程序当作“服务”来出售——要么为他们提供托管,要么把代码卖给他们,并提供支持。写一份合同,禁止他们重新分发代码。

不过,如果你真的想以某种方式混淆代码,你可以把Python应用程序完全以.pyc(Python编译的字节码)格式分发。这就是Py2App的工作原理。

虽然这样仍然可以被重新分发,编辑这些文件会非常困难——所以你可以加一些基本的许可信息,而不怕被几个#给破解了。

正如我所说,我认为通过加密或混淆等方式来防止盗版是行不通的。根据你的客户情况,简单的合同和一些非常基础的检查,往往比复杂的解密系统要有效得多(而且还能让使用你的应用程序的体验变得更好,而不是希望不会更糟)。

撰写回答