安装pyinstaller打包python项目成exe包含所需的环境
pyinstaller打包一个python项目,包括打包在anconda下面一个环境。
安装pyinstaller
先进入到需要打包的环境,通过
pip install pyinstaller
测试一下:
输入pyinstaller,显示下面的,表示安装成功。
开始打包
pyinstaller 选项 python程序文件
如:pyinstaller -F main.py
- pyinstaller -F main.py 只产生单个exe文件
- pyinstaller -D main.py 产生一个目录作为一个程序,里面包含exe文件
可以在-F、-D后面加上-w 表示:指定程序运行时不显示命令行窗口(仅对 Windows 有效),不带控制台的打包
当运行exe提示有一些dll文件不存在
我是直接去conda中自己的环境下的lib中的site-packages下找到这个库的文件夹,直接放到和exe文件的同目录下。
如果继续提示有些库没有,我就继续这样加入。
后来嫌弃太多,直接将整个site-packages下的所有文件放到exe文件的同目录下
运行成功!!!
spec打包
上面是最基础的打包,上面执行后会生成main.spec文件,你可以修改spec文件后通过下面的命令打包
pyinstaller main.spec
spec文件的说明
运行pyinstaller main.spec
时报错,可以在spec开头加上:
import sys ;
sys.setrecursionlimit(sys.getrecursionlimit() * 5)
# -*- mode: python ; coding: utf-8 -*-
import sys ;
sys.setrecursionlimit(sys.getrecursionlimit() * 5)
block_cipher = None
a = Analysis(
['demo.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='demo',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='demo',
)
参数的含义:
- pathex:默认有一个spec的目录,当我们的一些模块不在这个路径下,记得把用到的模块的路径添加到这个list变量里。同命令“-p DIR/–paths DIR”.
- datas:datas是一个元素为元组的列表,每个元组有两个元素,都必须是字符串类型,元组的第一个元素为数据文件或文件夹,元组的第二个元素为运行时这些文件或文件夹的位置。例如:datas=[(’./src/a.txt’, ‘./dst’)],表示打包时将"./src/a.txt"文件添加(copy)到相对于exe目录下的dst目录中。也可以使用通配符:datas= [ (’/mygame/sfx/*.mp3’, ‘sfx’ ) ],表示将/mygame/sfx/目录下的所有.mp3文件都copy到sfx文件夹中。也可以添加整个文件夹:datas= [ (’/mygame/data’, ‘data’ ) ],表示将/mygame/data文件夹下所有的文件都copy到data文件夹下。同命令“–add-data”。
夹中。也可以添加整个文件夹:datas= [ (’/mygame/data’, ‘data’ ) ],表示将/mygame/data文件夹下所有的文件都copy到data文件夹下。同命令“–add-data”。
- binaries:添加二进制文件,也是一个列表,定义方式与datas参数一样。没具体使用过。同命令“–add-binary”。