一、安装virtualenv库
pip install virtualenv
二、cmd命令行进到要创建虚拟环境的文件夹
三、创建虚拟环境
e:\venv> virtualenv my_project # 在venv文件夹中创建一个虚拟环境
四、激活虚拟环境
# windows环境
my_project\scripts\activate
# mac、Linux环境
source my_project_env/bin/activate
五、将py文件放到venv文件夹下
六、安装Python库
在venv文件夹下或虚拟环境文件夹下进行pip安装
# 将需要的库导入到txt文件
方式一:
pip freeze > requirements.txt # 有可能把不需要的包也导出
方式二:
pip install pipreqs
pipreqs ./ --encoding=utf8
# 在虚拟环境中安装需要的Python库
pip install -r requirements.txt
七、使用pyinstaller打包
安装:pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/
pyinstaller 最重要的两个参数就是 -F 与 -D 参数。
使用 - F 参数, pyinstaller 会将 python 程序打包成单个可执行文件。
使用 - D 参数, pyinstaller 会将 python 程序打包成一个文件夹,运行程序时,需要进入该文件夹,点击运行相应的可执行程序。
简单总结一下:
-F:打包 Python 程序为单个可执行文件
-D:打包 Python 程序为一个文件夹
-i:生成图标,只适用于 Windows 平台
-n:指定打包后生成文件的名称
-w:禁止命令行弹出
# 将要打包的代码放在venv或虚拟环境文件夹下进行打包
pyinstaller -F -w main.py
pyinstaller打包过程中报错处理:
1. ImportError: DLL load failed while importing win32api: 找不到指定的程序。
环境python3.8.10。解决办法:
方式1:将虚拟环境的scripts添加到环境变量中
方式2:将代码放到虚拟环境的scripts文件夹中,在scripts中封装。
2. Pyinstaller打包含有sklearn库报错,缺少模块
解决办法:在生成的spec文件中,hiddlemodule添加缺少的模块,重新打包pyinstaller xx.spec
3. Pyinstaller打包后,正常运行,但执行某个功能时闪退
往往是由于打包时缺少某个库造成的,比如用pandas读取xls文件,由于没有安装xlrd库,闪退。
解决办法:打包为console或debug模式,查看错误信息【推荐console模式,不推荐debug模式】 console模式举例:
pyinstaller -c demo.py
debug模式举例:
pyinstaller -d all demo.py
然后进入dist文件夹中,将demo.exe拖到命令行窗口(cmd或anaconda Prompt)执行即可,很容易发现出错提示。
pyinstaller踩坑记,缺少依赖、打包错误或运行无效排查过程备忘 - 知乎 (zhihu.com)
4. 打包flask web项目
由于flask web项目需要依赖静态资源,打包时需要进行指定 。
首先,生成*.spec文件
pyi-makespec app.py
其次,修改spec文件中的datas,指定静态资源相对路径
# 修改Analysis中的datas
datas=[('app\\static','app\\static'),('./app/templates','./app/templates')],
# 为了运行exe时有提示,修改EXE中的console
console=True,
最后,使用pyinstaller命令打包
pyinstaller -F app.py # 不加-w,以便打包后运行exe时有提示窗口
八、停用、删除虚拟环境
# 停用虚拟环境
deactivate
# 删除虚拟环境
rmvirtualenv my_project
九、virtualenv其他命令
cdvirtualenv #导航到当前激活的虚拟环境的目录中,比如说这样您就能够浏览它的 site-packages。
cdsitepackages # 和上面的类似,但是是直接进入到 site-packages 目录中。
lssitepackages #显示 site-packages 目录中的内容。