如何在Python中将代码打包,让用户可运行main.py却无法查看源码
Python代码打包为可执行文件以隐藏源码的方案
要让用户能运行你的Python代码但无法直接查看源码,下面是几个实用的方案,都是Python生态里常用的工具:
1. 使用PyInstaller(最常用)
PyInstaller可以把Python脚本打包成独立的可执行文件(Windows下是.exe,Mac是.app,Linux是可执行程序),打包后源码会被转为字节码封装,普通用户很难直接查看。
- 安装PyInstaller:
pip install pyinstaller - 打包
main.py:
进入main.py所在目录,执行:
执行完成后会生成pyinstaller --onefile main.pydist文件夹,里面的可执行文件就是用户能直接运行的程序,原.py文件无需发给用户。 - 额外选项:如果程序依赖配置文件、资源文件等,可以用
--add-data参数一并打包;若要做Windows GUI程序(隐藏命令行窗口),可添加--windowed参数。
注意:PyInstaller打包的文件存在被反编译出近似源码的可能,但对普通用户来说已经足够阻挡,若需要更强保护,可结合其他工具。
2. 使用Nuitka(编译为C代码,逆向难度更高)
Nuitka会把Python代码直接编译为C语言代码,再编译成可执行文件,相比PyInstaller,反编译难度大很多,同时生成的程序运行效率也更高。
- 安装Nuitka:
pip install nuitka - 打包
main.py:
执行命令:
生成的可执行文件在当前目录(或指定输出目录),用户只需运行该文件即可,看不到原Python源码。python -m nuitka --standalone --onefile main.py - 优势:生成的程序无需依赖Python解释器,运行速度更快,逆向破解的门槛远高于PyInstaller。
3. 使用Cython编译为扩展模块
Cython可以把Python代码编译成C扩展(Windows下是.pyd,Linux/Mac是.so),这类二进制文件无法直接查看源码,你可以写一个简单的启动脚本调用编译后的模块。
- 步骤:
- 安装Cython及对应编译工具(Windows需Visual Studio,Linux需gcc):
pip install cython - 将
main.py重命名为main.pyx,创建setup.py文件:from setuptools import setup from Cython.Build import cythonize setup( ext_modules = cythonize("main.pyx", compiler_directives={'language_level': "3"}) ) - 编译为扩展模块:
python setup.py build_ext --inplace - 编写启动脚本
run.py:import main if __name__ == "__main__": main.main() # 假设你的main.py以main()函数作为入口
run.py和编译出的.pyd/.so文件发给用户,用户运行run.py即可,核心逻辑在二进制模块中,无法直接查看。 - 安装Cython及对应编译工具(Windows需Visual Studio,Linux需gcc):
重要提示
没有任何方法能做到100%阻止逆向工程,但上述方法足以应对绝大多数普通用户的源码查看需求。如果涉及高度敏感代码,可结合代码混淆、加密等手段,但会增加开发复杂度。
内容的提问来源于stack exchange,提问作者Ashish Kumar
相关产品推荐
相关产品推荐

