隐藏Python代码以防止非程序员查看

1 投票
5 回答
1055 浏览
提问于 2025-04-18 11:24

我该如何让我的Python代码不被客户随意修改,以防他随便改动源代码呢?

我知道没有什么有效的方法可以完全隐藏Python代码,让人无法阅读。我只是想要一种简单的保护措施,让那些不太懂行的人不能轻易地用文本编辑器打开源文件,随便改动或者轻松理解代码的内容。因为我的代码写得很清晰,我希望能隐藏我最初使用的一些主要原则。

如果有人真的想要理解我做了什么,他是一定能做到的,我知道这一点。

那么,有没有什么常用的方法可以为Python代码提供简单的保护呢?

5 个回答

0

你可以做的事情

  1. 代码混淆
  2. 生成字节码

生成字节码有两种方法

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

如果你使用命令行,可以用python -m compileall <参数>来把 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)
1

在被接受的回答中提到的同一个帖子里,有人建议你使用 compileall 这个工具,这样会更好:

python -m compileall ./
1

你可以试着用像 pyinstaller 或 py2exe 这样的工具把它们转换成可执行文件,不过这样会让文件的大小变大。

1

你可以把所有的 Python 文件放到一个压缩包里,然后在你的应用程序启动之前或者启动时,把这个压缩包放到 Python 的路径上。如果你把压缩包命名成其他格式,而不是 .zip,这样就能防止那些不太懂技术的人找到源代码。

要启动你的应用程序,确保你的主模块是解压状态,并且在导入任何压缩包里的源代码之前,让它自己更新 Python 的路径。

在你的主模块中:

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

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

你还需要把 .pyo 和 .pyc 文件也放进压缩包里,不然导入的时候会很慢。想了解更多细节,可以查看 https://docs.python.org/2/library/zipimport.html

7

只需要按照这个回答的方法把它编译成字节码就可以了。

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

这个pyc文件可以用来替代py文件进行分发。

撰写回答