pyinstxtractor、venv与pyenv的浅浅认识
pyinstxtractor
- win下使用
python3 path/pyinstxtractor.py path/name.exe - 注意exe文件是用什么版本的python打包的,如果版本不对应可能会导致PYZ-00.pyz_extracted文件夹为空的情况.此文件夹PYZ-00.pyz_extracted非常重要,一般一个稍微大一点的项目都会分成多个py文件,甚至会依赖其他模块,这些被依赖的文件解析后都会放入PYZ-00.pyz_extracted中,可以说这里放的是核心代码。
至于如何确定python的版本
(1)可以将exe拖到010里面,搜索python,翻一翻便可以看到python38.dll或者python37.dll等等(只针对pyinstxtractor 2.1).
(2)在pyinstxtractor解包时,会显示版本
- 对于pyinstaller反编译的混淆,pyinstxtractor使用报错Error : Unsupported pyinstaller version or not a pyinstaller archive,参考文章:https://www.cnblogs.com/czlnb/p/15118864.html
翻阅pyinstxtractor.py的源码,搜索对应报错位置,分析
向下查询return True的位置
可以看到,此处要在self.fPtr.read(64).lower()中判断b'python'是否存在,向上看看,这个奇怪的数据区是什么意思
可以看出pyinstxtractor2.0的MAGIC(b'MEI\014\013\012\013\016')是在文件尾向上24位.可以看出pyinstxtractor2.1的MAGIC(b'MEI\014\013\012\013\016')是在文件尾向上24+64位
箭头所指位置到结尾刚好有88字节.
对于如何区分2.1与2.0,如果是2.1会找到python37.dll等等,2.0则找不到.原因:与2.0相比,2.1多了64字节的pylibname,那我们就看看该文件里存不存在pylibname进行判断.
venv
官方文档:https://docs.python.org/zh-cn/3/library/venv.html
此工具比较适合同一环境,不同项目的情况
安装 virtualenv:
python -m pip install virtualenv
创建虚拟环境:
python -m venv path/myenv
启动:
myenv\Scripts\activate
关闭:
deactivate
pyenv
下载地址:https://github.com/pyenv/pyenv
py.exe
py.exe为python自带的切换python版本执行script的程序
- 查看当前可用版本
py -0 - 运行目标版本
py -x.x - 以目标版本运行script
py -x.x name.py - 指定py版本使用pip
py -x.x -m pip install name
pyd
将.pyd文件放在当前工作目录便可以import,或者将.pyd文件放在lib/site-packages.