如何从客户那里混淆/隐藏我的Python代码,以便他无法改变他喜欢的来源?
我知道没有有效的方法可以隐藏Python代码,因此无法读取它。 我只想要一个简单的保护,一个不知道自己在做什么的人不仅可以用文本编辑器打开源文件,而且可以轻松地进行更改或理解所有内容。因为我的代码写得非常容易理解,所以我想隐藏我在第一时使用的主要原则。
如果有人真的想了解我所做的事,他会的。我知道。
那么你有一个常用的方法来为python代码提供简单的保护吗?
答案 0 :(得分:6)
答案 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)
有两种生成字节码的方法
如果使用命令行,请使用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)