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

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

        由于想要打包的是含有各种模块的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的版本不对的情况。

当你尝试使用`pyinstaller`工具将包含`torch`库的Python应用打包成可执行文件时,可能会遇到一些错误。这是因为`PyInstaller`可能不直接支持某些第三方库,尤其是那些依赖于复杂C/C++扩展或实时链接的库,如`torch`,它是一个深度学习框架,涉及大量底层编译。 常见的报错可能是关于缺失的动态链接库(DLLs)或者是找不到torch及其相关模块的问题。这通常是因为`pyinstaller`在打包过程中无法处理这些库的复杂依赖。 为了解决这个问题,你可以尝试以下步骤: 1. **添加路径**: 在`spec`文件中手动指定`hiddenimports`参数,包括`torch`和其子模块,例如:`hiddenimports=['torch', 'torch.nn', 'torch.optim']`。这有助于告诉`PyInstaller`哪些包需要在运行时被导入。 2. **处理依赖**: 对于`torch`的Cuda版本,确保所有必要的CUDA和cuDNN库也在系统的PATH中,并且已经安装了对应的`pycuda`、`cupy`等兼容库。 3. **构建环境**:确保你的开发环境中已经安装了完整的`torch`和`torchvision`,以及它们的二进制 wheel 文件,因为`pyinstaller`默认不会下载源代码进行编译。 4. **优化设置**: 使用`--onefile`或`--onedir`选项创建单个可执行文件或目录结构,这样可以在打包后自动处理一些依赖问题。 5. **检查错误详细信息**: 阅读具体的错误日志,它们通常会提供线索,如缺少的文件名或版本不匹配等。 6. **更新到最新版**: 有时候,新的`PyInstaller`版本可能已修复了一些对特定库的支持问题,尝试升级到最新的`pyinstaller`版本。 如果以上方法都不能解决问题,你可能需要考虑使用像`Nuitka`这样的工具,它专门针对这类问题进行了优化,或者寻求社区的帮助,在`PyInstaller`或`torch`相关的论坛上寻找解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值