win10下,将python脚本转换成可执行exe文件

一 前言

python脚本的执行对于不懂计算机的人来说非常痛苦,因此他们想要一个windows下能执行的exe程序,来满足在没搭建python环境的主机上执行对应的这段python程序。一个愉快的周末,本来可以愉快的打机看剧的,却被老姐叫来干活,要求将python转成exe,因为她boss电脑上没有满足的python环境,然后我就开始周末的忙碌了,因为网络上的文档太散太杂,没有一篇满足我的整个需求。最终用了两天才完成整个流程,可能我比较菜的原因 :( ,为了给亲爱的老姐学习,因此我特写此篇文档,将主要讲解如何从无到有地完成python转exe。

二 环境

  • 系统: win10虚拟机
  • python版本:3.5.2
  • pyinstaller版本:3.4

三 环境搭建

因为exe只能在windows执行,而我本机为macos系统,因此只能利用虚拟机,然后下载镜像文件iso来实现win10系统。这里用的虚拟机软件为virtualBox,镜像文件为官网下载的win10(64bit)。

一切准备完毕后,开始搭建python环境,这里很重要,在我搭建环境的时候,整个搭建过程的大部分坑都是因为python环境引起的,不要问我为啥会这样,因为我只是一个拧螺丝的,除了毕业设计用到python之后两年基本与之绝缘。因此在这里我建议大家一步到位,直接使用anaconda来搭建,直接去官网下载3.7版本的即可,(如果下载太慢,可以考虑各大大学的镜像)因为anaconda内部可以满足各个版本切换。安装完成后将anaconda目录和anaconda目录下的Scripts加入环境变量的Path下即可。

win10 我的电脑->属性->高级系统设置->环境变量->Path,如下图所示,加上最后两行,路径为你本机anaconda目录

切换python版本,因为下载的anaconda自带版本是3.7,可能有些小伙伴需要较低版本的python,稍微介绍切换python版本命令,本文参考Anaconda多版本Python管理以及TensorFlow版本的选择安装,在开始菜单中打cmd进入命令提示符。

#查看anaconda下的python版本
conda info --envs
#如果默认源下载过慢,建议使用国内源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/  
conda config --set show_channel_urls yes 
#下载python版本,这里我下载3.5.2,python352为自定义名字
conda create --name python352 python=3.5.2
#再次查看anaconda下的python版本,可以发现多处python352这个snapshot
conda info --envs
#使用3.5.2版本
activate python352
#版本已切换
python -V

下面进行pyinstaller安装

pip install pyinstaller

 到此整个环境已经搭建完成。如果搭建完成发现原来的脚本无法执行,缺少类库,比如numpy。使用pip命令重装类库即可。

pip install numpy

四 测试

按理来说,现在已经完成了整个环境的搭建可以开始玩耍了,已经可以完成一些简单脚本的转换了,比如以下这个helloworld脚本。

print("Hello World")
input()

保存在随便一个不含中文路径的目录下(养成好习惯,防止因为路径中文乱码问题被自己坑),然后在cmd下用pyinstaller命令打包成exe即可。pyinstaller命令及参数解释

#cd到刚刚写的helloworld.py目录
cd path
#使用installer命令安装,这里指定生成一个可执行exe文件即可
pyinstaller -F helloworld.py
#如果生成成功,会在当前目录的dist下生成一个可执行exe文件
cd dist
#运行exe测试
helloword.exe
#成功即完成

五 常见问题以及解决方案

5.1生成exe异常

13207 INFO: Processing pre-safe import module hook   setuptools.extern.six.moves
Traceback (most recent call last):
  File "<string>", line 2, in <module>
ImportError: No module named 'setuptools._vendor'

解决方案:升级setuptools即可

pip install -U setuptools

5.2成功生成exe但是执行异常

ImportError: No module named 'numpy.core._dtype_ctypes'
[6084] Failed to execute script sh50_0118_final

解决方案:首先先进入本地库的仓库,如果是通过anaconda安装的,python路径\Lib\site-packages\PyInstaller\hooks,python路径可以通过cmd命令where python来查询。

找到对应的hook-numpy.py,编辑

#如果文件中存在hiddenimports则在后面加上对应的类
#否则文件在最后新建数组hiddenimports,然后加上对应的类
hiddenimports=[
    #all your previous hidden imports
    'numpy.core._dtype_ctypes'
]

然后重新打包py文件至exe,再次执行如果依旧报类似问题,依次处理直到成功。这里要加上--clean命令,清理之前生成的文件。

pyinstaller -F --clean *.py

在这里要感谢打包时遇到pandas库报错处理(转)的帮助,解决了这个卡了近乎一天的问题。

六 总结

花了整个周末的时间来完成了这个工作,从弄虚拟机再到搭环境,坑很多,还有很多问题没有罗列出来(因为这是事后整理的,具体问题懒得重现了- -),只是取了几个具有代表性的、很难百度or谷歌出来的疑难杂症来说,希望对后来者有所启发。这样虽然已经完成工作,但是打包出来的exe非常大,紧紧一个helloworld就生成了6MB的exe文件,如果我还有空,并且我姐还有需求,可能会继续完善,减小exe的体积。完结撒花?

 

 

 

 

 

 

 

 

发布了5 篇原创文章 · 获赞 3 · 访问量 994

猜你喜欢

转载自blog.csdn.net/z1616595/article/details/86657163
今日推荐