16

我已经开始使用 Python 开发一个商业应用程序,并且正在权衡如何分发该应用程序的选择。

除了显而易见的(分发具有适当商业许可证的源)之外,我正在考虑仅分发.pyc没有相应.py来源的文件。但是我对 Python 的兼容性保证还不够熟悉,不知道这是否可行,更不用说它是否是一个好主意。

文件是否.pyc独立于底层操作系统?例如,.pyc在 64 位 Linux 机器上生成的文件可以在 32 位 Windows 机器上运行吗?

我发现该.pyc文件应该在错误修复版本之间兼容,但是主要和次要版本呢?例如,使用 Python 3.1.5 生成的文件是否与 Python 3.2.x 兼容?或者.pyc使用 Python 2.7.3 生成的文件是否与 Python 3.x 版本兼容?

编辑:

首先,我可能不得不安抚那些不愿分发资源的利益相关者。分发.pyc没有源代码的 's 可能会给他们一定程度的安慰,因为它需要额外的反编译步骤才能获取源代码,即使该步骤有些微不足道。足以让诚实的人保持诚实的障碍。

4

3 回答 3

17

例如,使用 Python 3.1.5 生成的文件是否与 Python 3.2.x 兼容?

不。

或者使用 Python 2.7.3 生成的 .pyc 文件是否与 Python 3.x 版本兼容?

双重没有。

我正在考虑仅分发 .pyc 文件而没有相应的 .py 源。

Python 字节码是高级且可简单反编译的。

于 2012-07-06T19:16:08.417 回答
4

您当然只能分发 .pyc 文件。正如 Cat 所提到的,不,它不会与 Python 的不同主要版本兼容。它可能会阻止某些人查看源代码,但 .pyc 文件很容易反编译。基本上,如果你能编译它,你就可以反编译它。

您可以使用像 py2exe / py2app / freeze 这样的二进制打包程序。我从未尝试过它们,但如果他们愿意,仍然有人可以反编译它们。

于 2012-07-06T19:25:09.783 回答
1

正如 Cat 所说,pyc 文件不是跨版本安全的。尽管您试图向用户隐藏的内容决定了您需要做什么。

至于源代码,在分布式应用程序中隐藏 Python 源代码并没有什么好的方法。如果你只是想隐藏特定的细节,你可以将它们打包到一个 C 扩展中——这将更难反编译。

因此,如果您担心代码的使用,请将许可证附加到代码中以供不使用,或者将您不想被盗的部分翻译成编译语言。如果您只是希望代码不是明显的 Python,您可以创建一个包装 Python 代码的二进制可执行文件(尽管如果有人从文件中提取它们,则不会隐藏实际细节)。

于 2012-07-06T22:35:15.353 回答