pyinstaller的详细使用方法和使用过程中的问题解决ImportError: cannot import name将Python程序打包为exe程序的一些问题pip离线安装内网环境部署

pyinstaller的详细使用方法和使用过程中的问题解决ImportError: cannot import name将Python程序打包为exe程序的一些问题pip离线安装内网环境部署


本文是我在最近两个周中研究如何将一个算法封装为一个exe程序运行,这样就不需要使用Python源代码在我的工程中来调用运行。经过两周问题的不断探索终于能够成功运行我的工程。我的一些解决经验和步骤也许能够为您提供一些可靠的经验,也为您节省没必要的浪费。

安装pyinstaller

注意了,这里我一开始就使用了anaconda3的虚拟环境来安装我的pyinstaller,注意,一定不要使用这个anaconda3来安装Python环境,下载一个64位的Python也许能节省您的时间和空间。我用纯Python安装pyinstaller要比在conda安装pyinstaller打包的大小要小很多,且conda在打包时提示各种库的问题,估计应该是conda环境依赖太复杂的原因。所以我建议您使用Python安装版来打包当然最后我也能用conda打包并运行成功
对了,我的环境是需要配置到内网,无法连接互联网,所以,所有过程需要先在外网笔记本上安装好后再运到内网…

安装Python

这里Python的版本您自己选择,去官网下载。

安装pyinstaller

这里我使用的是pip命令
pip install pyinstaller==5.13.2 -i https://mirrors.aliyun.com/pypi/simple

pip install -i https://mirrors.aliyun.com/pypi/simple pyinstaller==5.13.2

安装其他的依赖库

这里,需要安装运行Python所需的模块,打包的前提是用命令行或者pycharm在引用该环境下,能够正常运行。
比如pytorch numpy OpenCV-Python matplotlib等
还是上面👆🏻的命令,只是把pyinstaller==5.13.2换成你要安装的命令即可∶
比如∶
pip install -i https://mirrors.aliyun.com/pypi/simple opencv pandas seaborn cython

// An highlighted block
pip install -i https://mirrors.aliyun.com/pypi/simple opencv pandas seaborn cython

运行Python程序

这里一定要运行您的程序,并且能够正常运行才算完成环境的安装。当然如果没有验证,也不是多大关系,那么我们可以通过离线安装命令来安装缺少的库

如何离线安装∶

下载缺少的包

这里下载时,最好仍然使用同样的Python版本和环境,这样可以减少出错。
pip download -d offline pyinstaller==5.16.2
-i https://mirrors.aliyun.com/pypi/simple

// A code block
pip download -d offline pyinstaller==5.16.2 
-i https://mirrors.aliyun.com/pypi/simple

-i 是指定下载源,不指定就是默认源
-d是指定下载目录,不指定就是当前目录了

这条命令会下载pyinstaller5.16.2版本及其依赖到offline目录下。其他的依次类推。
在这里插入图片描述

安装下载的模块

命令行执行命令
pip install --no-index --find-links=./ pyinstaller

// A code block
pip install --no-index --find-links=./ pyinstaller

上面这条命令就是在你下载的目录下执行命令,一般是拷贝到内网后,在内网机上执行。
–find-links 即为你模块所在的目录,也可以是绝对路径。其实到这里,如果提示pip命令的问题,那么您很有可能需要看下面👇🏻的使用方法和解决方案。

使用pyinstaller

这里的使用,其实主要还是要说明在内网中的使用,外网环境中的问题其实比较好解决。

拷贝环境

这里,我将condaPython环境目录整个压缩打包拷贝到内网机器,再配置环境变量。
将Python目录和Python/script目录添加到path中。

测试环境

测试运行命令行∶
pyinstaller -v
如果能显示版本,那么就是OK。
如果提示∶
Fatal error in launcher∶Unable to Create process using …
在这里插入图片描述
这是因为内网环境Python目录和外网安装的Python环境目录不是同一目录。比如说,外网笔记本上安装在了d∶/Python目录下,而内网解压安装在e∶/env/Python目录下,那么就会出现上述错误。解决方法也很简单∶
安装nodepad++工具,并用工具打开pip.exe,搜索Python∶将目录改为正确目录保存即可∶
在这里插入图片描述
这里,pyinstaller.exe很有可能也会出现同样问题,如果不希望遇到同样问题,那么将外网和内网的安装目录保持一致是最好的解决方法。

打包py工程

打包可能简单也不简单,还是有两个需要说明和记录的地方

默认打包

命令行到Python程序目录,执行pyinstaller test.py即可自动生成… 这里其实默认参数是会打包所有依赖库和问题最多的地方也是这里。
有时候是缺模块,不能正确打包,这时就需要通过下载命令下好依赖模块并安装。
有时候是能正确打包,但是运行时又缺模块。这种情况有可能是pyinstaller需要重新安装,有可能是需要编辑spec文件,再打包。
如果用命令行运行py工程是正常的,而且打包也正常,那么按照我的方式编辑spec文件即可。
spec文件是自动生成的,执行pyinstaller命令后会生成一个spec文件,下次执行会覆盖,最好重命名一个。
在这里插入图片描述
name 是生成exe名称
exclude 是需要排除的模块名称,如果运行正常,打包正常,执行exe时提示找不到module,则将提示模块名称加到这里面,我这里就加了4个不需要的。
pathex 则是工程含义子目录,都要加到这里面,不然运行时提示找不到自定义模块名称。

到这里,基本上算是成功了。

对了,上面的图片是pyinstaller -F test.py 时自动生成的,-F和-D是冲突的。

打包

pyinstaller test.spec
注意,这里是spec文件,不是py文件
还可以加–distpath [指定生成目录]
上面的spec文件是最后生成一个exe文件,没有其他的一堆的文件,整个文件也只有200+MB。
当然,如果不想生成单文件的,也可以在不用-F参数时生成的spec文件,编辑条目也是那三条,下面👇🏻看下单目录生成的spec文件
在这里插入图片描述

总结

1.在外网机上安装Python及pyinstaller以及工程所依赖的模块
2.将Python目录全部拷贝到内网机,并且保持目录一致
3.测试并打包即可,注意最好使用spec文件打包。

编辑∶myhappyandy

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值