python 虚拟环境打包exe方法及路过的坑


这是个python 打包的问题,关于python打包心得更多了,小白打包往往把一个很简单的程序打包成几百兆,但是现在我觉得完全没用必要。打包也可以很简单,方法如下:

1、虚拟环境打包

1.1打包流程

1、分析代码,用到了哪些依赖包;
2、新建一个虚拟环境,然后把需要的包安装上;
3、激活虚拟环境,在虚拟环境上测试,测试没用问题就进行正式打包
说明:新建虚拟环境是打包后exe小的关键所在,因为要不然使用默认环境会把你所有包都编译一遍,不仅耗时长、打包出来的exe文件特别大、打包过程中各种问题层出不穷,可能那些包你都没用用到,但是报错了,你不得不花很多时间来解决这些问题。

1.2参考资料

什么,不会虚拟环境,不会打包?这里可以参考我之前写的文章:
1)从零开始,python打包工具pyinstaller的使用及踩过的坑
2)python三种虚拟环境安装方法和tensorflow1.12安装

2、打成功但是运行出错

按照参考资料基本上就很容易打包成功了

pyinstaller -Fc F:\GF\SARshibie\software\run_ship_rotate.py#打包成一个文件,控制台无界面的程序

打包成功:在这里插入图片描述

但是运行出错,错误信息如下:

[34900] WARNING: file already exists but should not: C:\Users\ADMINI~1\AppData\Local\Temp\_MEI349002\torch\_C.cp37-win_amd64.pyd
Traceback (most recent call last):
  File "run_ship_rotate.py", line 10, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "mmdet\apis\__init__.py", line 1, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "mmdet\apis\inference.py", line 4, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "mmcv\__init__.py", line 4, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "mmcv\fileio\__init__.py", line 4, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "mmcv\fileio\io.py", line 4, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "mmcv\utils\__init__.py", line 3, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "mmcv\utils\env.py", line 2, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "torch\__init__.py", line 81, in <module>
ImportError: DLL load failed: 找不到指定的模块。
[36664] Failed to execute script 'run_ship_rotate' due to unhandled exception!

在这里插入图片描述

2.1问题分析:

问题描述:有一个WARNING,和一堆错误

2.2、修改spec文件后重新打包

按照网上的方法,查看你编译的代码哪一行有问题,就在编译的spec文件中增加哪个包,于是修改spec文件,增加了一大堆
在这里插入图片描述

继续打包

pyinstaller -Fc F:\GF\SARshibie\software\run_ship_rotate.spec

2.3、设置虚拟环境的环境变量后重新打包

编译出来运行WARNING,但是错误问题依旧,然后仔细分析问题,发现最终的错误是在这两个文件上,最终根据这个路径,找到文件中的出错代码点
在这里插入图片描述
定位问题代码:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
根据最后一个,“from torch._c import * ”这个代码百度搜索错误原因,找到解决方案:

参考:https://blog.csdn.net/ewqapple/article/details/86155286
把虚拟环境的环境遍历设置了个遍
在系统“PATH”里面增加了如下的环境变量,解决了torch
在这里插入图片描述
继续打包

pyinstaller -Fc F:\GF\SARshibie\software\run_ship_rotate.spec

注意:
最后移植的时候发现把exe拷贝过去没啥用,还是报这个错误,主要是要把下面这个路径拷贝到新电脑,然后设置为环境变量就OK了

C:\Anaconda3\envs\simp37\Library\bin

2.4、降低问题包的版本后重新打包

编译完成后还是出错,问题:

OSError: Can't get source for C:\Users\ADMINI~1\AppData\Local\Temp\_MEI348442\torchvision\ops\misc.pyc. TorchScript requires source access in order to carry out compilation. Make sure original .py files are available. Original error: could not get source code
[27976] Failed to execute script 'run_ship_rotate' due to unhandled exception!

仔细研究后如下红色框位置,判断肯定是torchvision问题
在这里插入图片描述
于是查看版本:torch版本1.3.1 torchvision版本0.4.2,网上查了对应版本号没啥问题
在这里插入图片描述

解决方案:
降低torchvision版本,参考网上:https://blog.csdn.net/jacke121/article/details/104986360
卸载现有版本,按照低版本

pip uninstall torchvision
pip install torchvision==0.2.2.post3

更改后的安装包:
在这里插入图片描述

继续打包

pyinstaller -Fc F:\GF\SARshibie\software\run_ship_rotate.spec

编译后的执行程序可以正常执行了。
这个问题困了我一天,终于干掉了,特此记录。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Python是一种非常流行的编程语言,因其易于学习和使用,被广泛应用于各种应用程序的开发。当我们将Python应用程序打包成可执行文件时,有时会出现一些问题,例如,与其他Python程序的不兼容性或特定库的依赖性等。为了解决这些问题,我们可以使用虚拟环境虚拟环境Python的一种隔离机制,它允许我们在同一机器上运行多个Python环境,每个环境都有自己的Python解释器和安装的库。由于每个环境都是独立的,因此我们可以在其中安装不同版本的Python和库,这是很有用的,特别是当我们需要在不同的项目中使用不同的Python和库时。 要在虚拟环境打包Python应用程序,我们需要按照以下步骤操作: 1.首先,在命令行中使用命令“pip”安装Virtualenv。 2.创建一个名为“myenv”的虚拟环境,可以使用命令“virtualenv myenv”。 3.激活虚拟环境,可以使用命令“source myenv/bin/activate”(Linux/MacOS)或“myenv\Scripts\activate”(Windows)。 4.在虚拟环境中安装所需的Python库、模块和依赖项,可以使用命令“pip install”。 5.使用PyInstaller等工具将Python应用程序打包成.exe文件。 使用虚拟环境打包Python应用程序可以大大简化应用程序的分发和安装过程,同时确保应用程序可以在不同的机器上运行,而不受不同Python和库版本的影响。这是Python开发中的一个非常有用的技巧,应该掌握并善于应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值