关于pyinstaller打包(pytorch, torchvision, opencv-python)

Python项目打包与环境配置实战
本文记录了在Anaconda环境下创建虚拟环境、安装所需模块、解决打包过程中遇到的ImportError和torch.jit.script问题,最终成功使用pyinstaller进行Python文件打包的详细步骤。过程中涉及numpy、torch和自定义模块的版本匹配,以及对cuda和cpu环境的调整。
部署运行你感兴趣的模型镜像

        由于最近的工作的需要,现在特意记录一下。这个部分也是折腾了我一点时间,在网络上也是找寻各种问题的解决方案,话不多说,直接上干货。

        由于想要打包的是含有各种模块的python文件,所以在这里在anaconda中先创建一个虚拟的环境。

        1. 打开Anaconda Prompt,输入conda create -n your_env_name python=X.X

             我自己的这里是输入conda create -n classification python=3.7

             然后,激活这个环境,在创建好之后会有这部分的提示,复制粘贴+回车即可。

                conda activate classification

        2. 将需要打包的项目复制在这个文件夹中,路径在安装的Anaconda中的envs中。

        3. 配置运行的环境,现在环境中只有python的一些基本模块,所以需要先运行一下。

            这个时候就会各种提示,没有各种各样的module。

            这个时候既可以选择离线安装,也可以选择在线安装。

            我这里是选择离线安装

            torch、torchvisionhttps://download.pytorch.org/whl/torch_stable.html

            我自己这里下载的是cpu版本,cuda版本还没搞明白,明白了的话,再更新。

            根据自身的需要,下载相应的版本。pip离线安装即可

            这里需要注意的是,不同的版本也会出现各种各样的问题。

            接下来,还会缺少其他的模块。

            在PyPI · The Python Package Index里面搜索相应的版本下载并离线安装即可。

            直到可以在虚拟环境中可以运行需要打包的文件。

            ## $$ && 多几个符号引起注意,原本的训练模型需要用到gpu训练,所以所有的tensor都是cuda。在这里,我就一个一个更换过来,改成了cpu的。 

        4. 然后,就可以安装pyinstaller. 离线也可,在线也行。文件都是比较小的,速度会很快。

        5. 接下来就要开始惊心动魄的打包环节,cd 到需要打包的文件夹中,输入

                        pyinstaller -F eval.py  回车就行

            在这里,因为我要运行的程序是eval.py,你们自己的就换成自己文件的名字就好。

            这里,我们可以发现,项目里多了三个文件

                dist文件夹、build文件夹、eval.spec文件(这里是相对于我来说的)

        6. 接下来,在cmd窗口中拖入dist里面的exe文件,敲回车键。

                        同时双击也可,但是窗口会一闪而过。然后,幺蛾子就出现了。

            (i)  ImportError: numpy.core.multiarray failed to import

                   这个问题网络上有好多解决方案,我自己好用就是

                        在出现问题的py文件中输入以下代码

import numpy
import numpy.core._dtype_ctypes

            (ii) 这个错误我比较抓狂,网上搜了各种方法,都不行。

 

                后来一个一个文件看,发现问题出在models\vision\detection\_utils.py的第74行

                @torch.jit.script,这个部分我注释掉了。然后exe文件就可以成功运行了。

                我打包了两个不同的python文件,都是需要将文件中的@torch.jit.script

# @torch.jit.script

        7. 最后,里面如果出现了各种错误的话。有一定概率是module的版本不对。

            我这里遇到的就是pyinstaller和opencv-python的版本不对的情况。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

<think>好的,我现在需要帮助用户了解如何使用PyInstaller打包包含OpenCVPython脚本。用户已经提供了几个引用,我需要结合这些信息给出详细的步骤和注意事项。 首先,根据引用[1],PyInstaller支持Python 3.8到3.12,所以需要确认用户的Python版本是否在这个范围内。然后,安装PyInstaller最好使用清华源,这样速度更快。用户可能需要先安装PyInstaller,命令是pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller。 接下来是打包方法。引用[3]提到可以在conda虚拟环境中新建环境或使用原环境。新建环境的好处是减少依赖,使生成的exe更小。所以建议用户创建干净的虚拟环境,安装必要的包,比如opencv-pythonpyinstaller。这样可以避免不必要的库被打包进去。 然后,打包命令方面,基本命令是pyinstaller -F main.py,但可能需要处理OpenCV的依赖问题。引用[2]中的pathex参数可能用于指定项目路径,但用户的问题是关于OpenCV的,所以可能需要使用--add-data来添加OpenCV的额外文件。例如,如果OpenCV有数据文件或DLL需要包含,可以用--add-data参数指定。 注意事项方面,OpenCV可能会有隐式依赖,比如AV编解码器或特定的DLL。用户可能会遇到错误提示缺少某些文件,这时候需要手动添加。另外,测试时需要检查命令行输出是否有缺失模块的警告,或者用--hidden-import显式导入模块。对于PyQt5或PyTorch等库,可能需要额外处理,但用户当前的问题是OpenCV,所以重点放在OpenCV相关的问题上。 还有,引用[3]提到在虚拟环境中打包可以减小文件体积,所以必须强调环境的重要性。同时,OpenCV版本也可能会影响打包结果,建议用户使用较新的稳定版本。 总结步骤:安装PyInstaller,创建虚拟环境,安装依赖,执行打包命令,处理可能的依赖问题,测试exe文件。注意事项包括环境清洁、路径处理、隐式依赖和测试方法。</think>使用 PyInstaller 打包包含 OpenCVPython 脚本时,需特别注意依赖管理和环境配置。以下是具体方法和注意事项: --- ### 一、基础打包方法 1. **安装 PyInstaller** ```bash pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller # 清华镜像加速 ``` 2. **创建纯净虚拟环境(推荐)** ```bash conda create -n opencv_env python=3.8 # Python版本需符合3.8-3.12范围[^1] conda activate opencv_env pip install opencv-python pyinstaller # 仅安装必要依赖 ``` 3. **执行打包命令** ```bash pyinstaller -F --hidden-import=skimage --add-data "<opencv_shared_path>;." main.py ``` - `-F` 表示生成单个可执行文件 - `--hidden-import=skimage` 解决 OpenCV 隐式依赖 SciKit-Image 的情况 - `--add-data` 需替换为实际的 OpenCV DLL 路径,例如: ```bash --add-data "C:/opencv_env/Lib/site-packages/cv2/opencv_videoio_ffmpeg420_64.dll;." ``` --- ### 二、关键注意事项 1. **OpenCV 隐式依赖** - 如果使用 `cv2.VideoCapture`,需手动添加 FFmpeg 动态链接库(如 `opencv_videoio_ffmpeg*.dll`) - 查找路径:`<Python环境路径>/Lib/site-packages/cv2/` 2. **路径配置优化** ```python # 在 spec 文件中添加以下配置[^2] a = Analysis( pathex=[r'D:\project_path'], # 项目根目录 binaries=[('cv2/opencv_videoio_ffmpeg420_64.dll', '.')] # 显式绑定二进制文件 ) ``` 3. **排除冗余依赖** ```bash pyinstaller --exclude-module=matplotlib --exclude-module=scipy main.py ``` --- ### 三、常见问题解决 | 问题现象 | 解决方案 | |---------|----------| | 运行时报错 `No module named 'skimage'` | 添加 `--hidden-import=skimage` | | 视频处理功能失效 | 检查是否遗漏 FFmpeg DLL 文件 | | 生成文件体积过大 | 使用虚拟环境并排除非必要模块[^3] | --- ### 四、验证打包结果 1. 在命令行运行生成的 `.exe` 文件,观察报错信息 2. 使用 `Process Explorer` 工具检查加载的 DLL 文件 3. 测试 OpenCV 核心功能(如图像读取、摄像头调用)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值