python文件可以用pyinstaller打包成可执行文件,方便没有安装python编译器的空机器运行
首先pip安装pyinstaller,pip国内有服务器
linux下~/.config/pip/pip.conf
[global]
timeout = 60
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
windows下 %appdata%/pip/pip.ini
C:\Users\Administrator\AppData\Roaming\pip\pip.ini
然后pip install pyinstaller
安装成功到需要打包的文件目录执行:
pyinstaller -F --clean testmylib.py --icon=camerahello.ico这个示例是2个文件mylib.py和testmylib.py,打包只需要testmylib.py,需要的依赖会自动完成
-F 是打包成单一文件,没有这个会放到一个目录下一堆文件
图标是为了个性化
打包成功可执行文件在dist目录下
PyInstaller Extractor是可以提取出PyInstaller所创建的windows可执行文件的资源内容
https://github.com/extremecoders-re/pyinstxtractor
所以请不要放加密信息在里面
继续用现有示例演示:
cd dist
python pyinstxtractor.py testmylib.exe
这就解出pyc文件
继续下载一个反编译pyc的工具,比如uncompyle6
pip install uncompyle
uncompyle是有多个版本的,会自动下载uncompyle6的
然后进入目录dist/testmylib.exe_extracted
uncompyle6 testmylib.pyc>testmylib.py
好吧,得到了原先的testmylib.py文件,太厉害哦了,如果testmylib.py引入的其他python文件,会在更下一层目录找到mylib.pyc
成功实验python3.5 3.7都可以,3.8引入的文件mylib.pyc也顺利,主文件稍有乱码
由此可以知道,为了安全,推荐使用更新版本,破解毕竟是有了新版发布才会尝试去破解,肯定稍晚一些
另外可以将附加模块编译为动态链接库pyd这样更安全
pip install Cython
然后新建编译脚本build_pyd.py
# -*- coding: utf-8 -*-
from distutils.core import setup
from Cython.Build import cythonize
setup(
name = 'any words.....',
ext_modules = cythonize(["mylib.py", ]),
)
python3 build_pyd.py build_ext --inplace
然后就编译出mylib*.pyd,如果有多余字符可以重命名,python原则是优先导入pyd,所以源文件mylib.py不用删除
运行 打包都可以,反编译下级目录没有mylib.pyc,testmylib.pyc主目录有了一个 mylib.pyd 这个格式的反编译少见,暂时安全了
----------------------------
Cython编译py在linux下生成so,window下生成pyd
windows下提示“Unable to find vcvarsall.bat”的问题
需要vc++的库,进入python控制台
import sys
sys.version 能看到本python是哪个vc++版本编译出来的
python3.7 msc v.1914 Visual Studio 2017 version 15.7 vc++版本是 14.14
https://blog.csdn.net/aeu9737/article/details/101927250
用Microsoft Visual C++ Build Tools.exe下载工具安装了win10sdk