python 用marshal后 运行py正常,编译后exe文件提示importError
创建一个52pojie.py文件,里面是from __future__ import unicode_literals
from concurrent.futures import ThreadPoolExecutor
import re
import sys
s ="hello/world"
new_s = re.split('/',s)
print(new_s)
首先是python -m py_compile 52pojie.py 成52pojie.pyc
然后把52pojie.pyc文件seek(8),再经过marshal 的load 和dumps,转换成scrambled_code
fd = open(r'.\52pojie.pyc', 'rb')
fd.seek(8)
import marshal
co = marshal.load(fd)
fd.close()
code_string = marshal.dumps(co)
scrambled_code = code_string.encode('zlib').encode('base64')
print scrambled_code
把prin出来的字符串eJxFT8tOwzAQHCdNCNBD1B/gmlMrirgghDiA4IRQ4UIUyariRU3lxpUfKj3z4bBOi1jbo9nZ9Xjd
4hgpn3skcB9MFG8BDWwEagER8wQ6wSZFnR7yFHqEeoQjz1BnUKzkoBHWJ1AZKMd3groAFXh65q63
Kmf37oejEsx8yRD6rjWKpO482aV2h8qE4X1laalejdGPX9QGb+xLOGd9RVqb2c5YrUJsnlWn8coZ
g5SfwQdLUi7wZ9Oavg3WUu+nh6JbDE8kDJZ8/LnbOx8157OIW55lYD3tpKui0z+4C4aHm+ZyftVs
935l+sYPgzbX861ZdzRlteCe241RQdPdYDxmKEUpxrxyMRG/7VFOuQ==,创建新的new_52pojie.py文件,里面是
scrambled_code_string='''eJxFT8tOwzAQHCdNCNBD1B/gmlMrirgghDiA4IRQ4UIUyariRU3lxpUfKj3z4bBOi1jbo9nZ9Xjd
4hgpn3skcB9MFG8BDWwEagER8wQ6wSZFnR7yFHqEeoQjz1BnUKzkoBHWJ1AZKMd3groAFXh65q63
Kmf37oejEsx8yRD6rjWKpO482aV2h8qE4X1laalejdGPX9QGb+xLOGd9RVqb2c5YrUJsnlWn8coZ
g5SfwQdLUi7wZ9Oavg3WUu+nh6JbDE8kDJZ8/LnbOx8157OIW55lYD3tpKui0z+4C4aHm+ZyftVs
935l+sYPgzbX861ZdzRlteCe241RQdPdYDxmKEUpxrxyMRG/7VFOuQ=='''
exec __import__('marshal').loads(scrambled_code_string.decode('base64').decode('zlib'))
以上的方法是百度找到的。
运行new_52pojie.py文件,可以打印
但是编译成.exe文件,就提示import Error No module namedconcurrent.futures
把from 开头的这2条注释掉,再编译,是能正常运行exe文件的,求助,如果需要concurrent.futures,怎么不提示错误呢
编译exe为何不用pyinstaller 打包成exe ixsec 发表于 2019-7-1 12:06
编译exe为何不用pyinstaller 打包成exe
因为那个生成的文件大了 7倍 ,不信你试试。{:301_1006:}
1.安装pyinstaller
cmd命令行下
cd /d E:\Python37\Scripts
pip install pyinstaller
2.安装pywin32, 下载对应的版本:
https://nchc.dl.sourceforge.net/project/pywin32/pywin32/Build%20221/pywin32-221.win-amd64-py3.7.exe
准备工作已经完成,接下来回到命令提示符,转到你的python的scripts目录下输入
pyinstaller -F d:\python\login.py
其中-F为参数,可以写多个,如pyinstaller.py -F -w C:\python\login.py
参数 含义
-F 指定打包后只生成一个exe格式的文件
-D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
-c –console, –nowindowed 使用控制台,无界面(默认)
-w –windowed, –noconsole 使用窗口,无控制台
-p 添加搜索路径,让其找到对应的库。
-i 改变生成程序的icon图标
D:\python\login.py为你所要转换的文件的路径及文件名,也可以把py文件放在python路径下的scripts路径下,
这样就可以省略路径,直接写文件名login.py
等待运行结束,若没有错误,EXE文件会创建在python安装路径的Scripts文件夹中的dist文件夹内,如D:\python\Scripts\dist。
此时就可以直接运行EXE文件了
https://blog.csdn.net/yufen9987/article/details/73865281/ ixsec 发表于 2019-7-1 12:06
编译exe为何不用pyinstaller 打包成exe
这个pyinstaller打包成exe,和编译成exe,是一个意思吧,我百度python 编译exe的话,就是pyinstaller和另外一个 冥界3大法王 发表于 2019-7-1 12:18
ixsec 发表于 2019-7-1 12:06
编译exe为何不用pyinstaller 打包成exe
编译和pyinstaller打包,是有区别的???不过我的问题是另外一个 kge369 发表于 2019-7-1 12:31
编译和pyinstaller打包,是有区别的???不过我的问题是另外一个
不晓得什么问题 我用python 3.7.3 运行你的代码各种出错。。。。。 ixsec 发表于 2019-7-1 13:34
不晓得什么问题 我用python 3.7.3 运行你的代码各种出错。。。。。
忘了第一个是import的话,需要先pip kge369 发表于 2019-7-1 13:37
忘了第一个是import的话,需要先pip
fd = open(r'.\52pojie.pyc', 'rb')
fd.seek(8)
import marshal
co = marshal.load(fd)
fd.close()
code_string = marshal.dumps(co)
scrambled_code = code_string.encode('zlib').encode('base64')
print scrambled_code
这个 一直出错~~ 各种错误都有。。 ValueError: bad marshal data (unknown type code) 头大。。。。 本帖最后由 kge369 于 2019-7-1 14:05 编辑
ixsec 发表于 2019-7-1 13:44
ValueError: bad marshal data (unknown type code) 头大。。。。
哎,我不知道什么时候把fd.seek(8) 给弄没了,在import之前,有行这个,没有检查仔细,我上面的描述是有seek的,晕倒
页:
[1]
2