作者:后浪
在B站上看到何冰老师的演讲,深受鼓舞,以下这段话,愿与诸君共享,互勉。
那些抱怨“一代不如一代的人”
应该看看你们
就像我一样
我看着你们 满怀感激
因为你们 这个世界会更喜欢中国
因为一个国家最好看的风景
就是这个国家的年轻人
因为你们 这世上的小说 电影 音乐中表现的青春
不再是忧伤 迷茫
而是善良 勇敢 无私 无所畏惧
是心里有火 眼里有光
...
如果你们依然需要我们的祝福
那么
奔涌吧 后浪
我们在同一条奔涌的河流
学习编程时,安装解释器和配置相应的编程环境是一件比编程本身还要麻烦的事情,大家都知道。如果我们恰好兴致到时,编写了一个Python代码开发的工具,喜出望外分享给朋友使用时,却苦恼了。因为——我们需要让别人做如下两步:
1. 安装Python解释器
2. 在命令行运行python程序文件,比如: python xxx.py
如果朋友是一个非IT人士,使用这样的工具,就太麻烦了。
如果我们能直接让别人直接双击运行我们的程序就好了。
有没有这样的好事?
还真有!
有几款工具可以把 解释器、Python 代码 和 依赖的库 制作到一个目录中,我们只需要双击其中的 可执行程序,就可以运行我们的Python程序了。
其中 PyInstaller 是目前比较常用的一款。
PyInstaller 支持 Python 2.7 和 Python 3.3 以后的版本。
支持在 Windows, Mac OS X, and Linux 系统上打包出 可执行程序。
PyInstaller库的安装方法如下:
import os
os.system('pip install pyinstaller')
pip install pyinstaller
假设我们写了一个发送邮件的程序,命名为:
Send_email.py
然后我们在该程序的目录下,打开powershell命令行(按住Shift键,鼠标右键单击打开)
打开之后输入如下命令:
pyinstaller Send_email.py --workpath C:\Users\tingy\Desktop\Sendmail --distpath C:\Users\tingy\Desktop --icon="C:\Users\tingy\Desktop\Sendmail\email_ico.ico" --runtime-hook="C:\Users\tingy\Desktop\Sendmail\runtimehook.py
在线转ico网址 ^^点击飞过去^^
上面这样操作后,大家可以发现我们只要运行Send_email.exe文件,但是该目录下却有很多其他的.dll 之类的库文件。
这使得我们要寻找并运行程序时,要在这么多文件中找到 .exe 文件,比较费劲。
我们可以通过如下方法,把这些库文件放到 单独的一个 目录中。 这样.exe所在的目录就显得比较清爽了,也好找到.exe文件了。
我们添加一个Python代码文件,名为 runtimehook.py
其内容如下
import sys
import os
currentdir = os.path.dirname(sys.argv[0])
libdir = os.path.join(currentdir, "lib")
sys.path.append(libdir)
#os.environ['path'] += ';./lib'
上面的命令指定 生成的.exe运行时,会先执行 runtimehook1.py 里面的代码。
这样就会指定 .exe 程序所在的目录下面的lib目录:
上面的命令执行结束后,我们进入到目录distpath\send-eamil 中,新建一个名为 lib 的目录,把除了下面的几个文件之外的所有其他文件都放到lib目录里面。
base_library.zip
byhy.exe
byhy.exe.manifest
python38.dll
有的时候,我们运行打包好的程序,会出现导入库错误的提示,比如下面
ImportError: could not import module 'PySide2.QtXml'
PyInstaller 没法分析出动态导入的库有哪些,我们可以通过命令行参数 --hidden-import 告诉它。
比如,如果我们运行出现
could not import module 'PySpder.QtXml'
错误 , 就可以这样
pyinstaller httpclient.py --hidden-import PySpider.QtXml
好啦,本期的分享就到这。小伙伴们如果喜欢的话,欢迎点赞评论走一波。如果有不足之处,还请多多指正呀。