Python 虚拟环境及pyinstaller打包

发布于 2022-09-30  1718 次阅读


Please refresh the page if equations are not rendered correctly.
---------------------------------------------------------------

创建 (venv 模块)

Python3.3 之后可以用模块 venv 来创建虚拟环境,默认随Python一起安装。创建命令如下(命令行):

python -m venv myvenv

可以在命令执行目录创建一个名为 myvenv 的虚拟环境

venv 的参数():

  • –without-pip: 不安装 pip,默认安装
  • –clear:如果当前目录已有其他虚拟环境,清除重建

因为 venv 是依附于Python解析器创建的,所以不需要指定 Python 解释器版本。

切换到当前虚拟环境

  • linux:
$ cd venv
$ source ./bin/activate
  • Windows 10:
> cd venv
> .\Scripts\activate.bat

激活后,命令行中的路径应已经切换到当前虚拟环境的文件夹,如下图:

使用如下命令可以在命令行中输出当前路径:
- Linux 下:

echo $PATH
  • Windows 下
echo %PATH%

退出环境

  • linux:
$ deactivate
  • Windows 10:
> .\Scripts\deactivate.bat

pip包管理

  • 使用pip list可以列出所有已安装的第三方包
  • 在命令行中使用pip freeze > modules.txt可以将所有第三方包的名称导出到当前文件夹
  • 使用pip install -r modules.txt可以将这些包安装在另一个环境下
  • 批量卸载则是pip uninstall -r modules.txt -y。使用-y参数即直接删除,不需询问是否删除。

Pyinstaller打包

在pycharm当前虚拟环境下的Terminal中安装pyinstaller (使用command prompt)

pip install pyinstaller

Pyinstaller 使用
1) 放入 UPX(此步可选)
用于减小 exe 文件大小。
https://github.com/upx/upx/releases 下载解压后,把 upx.exe 放到需要编译的文件目录。
2) 放入图标文件(此步可选)
Ico 格式,放到需要编译的文件目录。
假设文件名为 app.ico。
在 PyCharm 的 Terminal 执行:
pyinstaller -F -i app.ico main.py

注意,如果需要修改spec文件并使用修改后的spec文件生成程序,再编译时只需要指定spec文件即可,不再需要包含python文件,即:

pyinstaller main.spec

注意:使用PyVista时需要在spec文件中指定以下内容,否则程序因缺少组件无法运行:

hiddenimports=['vtkmodules',
                            'vtkmodules.all',
                            'vtkmodules.qt.QVTKRenderWindowInteractor',
                            'vtkmodules.util',
                            'vtkmodules.util.numpy_support',
                            'vtkmodules.numpy_interface.dataset_adapter',
                           ],

双击pyinstaller生成的exe文件,如果报错时错误信息会一闪而过,此时如果在terminal中运行该文件,则会保留报错信息。因此调试时应该使用terminal。

Reference

  1. 最全的Python虚拟环境使用方法 - 知乎
  2. Python 虚拟环境 看这一篇就够了 | Python技术
  1. Freezing PyVista with pyinstaller — PyVista 0.36.1 documentation
  2. Using PyInstaller — PyInstaller 5.4.1 documentation
Everything not saved will be lost.
最后更新于 2022-09-30