隐藏非程序员的Python代码

时间:2014-06-28 08:05:10

标签: python obfuscation

如何从客户那里混淆/隐藏我的Python代码,以便他无法改变他喜欢的来源?

我知道没有有效的方法可以隐藏Python代码,因此无法读取它。 我只想要一个简单的保护,一个不知道自己在做什么的人不仅可以用文本编辑器打开源文件,而且可以轻松地进行更改或理解所有内容。因为我的代码写得非常容易理解,所以我想隐藏我在第一时使用的主要原则。

如果有人真的想了解我所做的事,他会的。我知道。

那么你有一个常用的方法来为python代码提供简单的保护吗?

5 个答案:

答案 0 :(得分:6)

使用this answer中的方法将其编译为字节码。

import py_compile
py_compile.compile("file.py")

可以分发pyc文件来代替py文件。

答案 1 :(得分:1)

您可以尝试使用pyinstaller或py2exe之类的内容将它们转换为可执行文件,但这会增加分发大小。

答案 2 :(得分:1)

您可以将所有python文件放在zip文件中,并在启动应用程序之前或期间将zip文件放在python路径上。如果你将zip文件命名为.zip之外的东西,它将阻止技术上无能为力的查找源代码。

要启动您的应用,请将主模块解压缩,并在导入任何压缩源之前让它更新python路径。

在您的主要模块中:

__import__('sys').path.append('./source.dat')
import mymodule
...

if __name__ == '__main__':
    ....

您需要在zip存档中包含.pyo和.pyc文件,否则导入速度会很慢。有关详细信息,请参阅https://docs.python.org/2/library/zipimport.html

答案 3 :(得分:1)

As suggested in the same post as the one in the accepted answer您最好使用compileall

python -m compileall ./

答案 4 :(得分:0)

你可以做

  1. Code Obfuscation
  2. Generate byte code

有两种生成字节码的方法

  1. 命令行
  2. 使用python程序

如果使用命令行,请使用python -m compileall <argument>将python代码编译为python二进制代码。 例如:python -m compileall -x ./*

或者, 您可以使用此代码将您的库编译为字节码。

import compileall
import os

lib_path = "your_lib_path"
build_path = "your-dest_path"

compileall.compile_dir(lib_path, force=True, legacy=True)

def compile(cu_path):
    for file in os.listdir(cu_path):
        if os.path.isdir(os.path.join(cu_path, file)):
            compile(os.path.join(cu_path, file))
        elif file.endswith(".pyc"):
            dest = os.path.join(build_path, cu_path ,file)
            os.makedirs(os.path.dirname(dest), exist_ok=True)
            os.rename(os.path.join(cu_path, file), dest)

compile(lib_path)