前言
最近写了一个小小的检测程序, python 写起来只需要短短一百行, 可是打包起来就没有 C 那么容易了下面记录一下我艰难的打包过程
方法一: py2exe
py2exe 是一种经典的方法, 为什么说他经典呢? 因为这玩意取了个这么好听的名字, 但是只支持到 python3.4, 你这让我们这种紧跟时代潮流的弄潮儿怎么打包?
好吧, 放弃
方法二: pyinstaller
这是一个看起来比较靠谱的方法, 只需要用 pip 安装, 然后在命令窗里面一通操作就可以了在这里, 我参考了另一位老哥的博客(http://blog.csdn.net/mrlevo520/article/details/51840217)
不管那么多, 我直接三下五除二, 开始了 pip, 打开 Anaconda Prompt, 输入 pip install pyinstaller
我是采用 Anaconda 安装的 python3, 所以自然用的是 Anaconda Prompt, 这里大家应该没有什么疑问吧 :)
结果令人惋惜:
PermissionError: [WinError 32] 另一个程序正在使用此文件, 进程无法访问
无奈的我只好上网寻求帮助, 在这位同学的博客 (http://blog.csdn.net/qq_33530388/article/details/68933201) 找到了解决方法, 原来是编码的问题虽然 py3 统一用 utf-8 了但 win 下的终端显示用的还是 gbk 编码
解决方法如下:
从你的 python 文件夹里找到 pip 下的 compat 文件夹, 我的在 F:\python\Anaconda3\Lib\site-packages\pip\compat
没错就是这里, 有一个__init__.py 文件, 打开它, 执行以下操作:
return s.decode('utf_8') 改为 return s.decode('cp936')
OK, 结束后再次尝试, 看看能不能解决
PermissionError: [WinError 32] 另一个程序正在使用此文件, 进程无法访问好吧, 还是不行
不过功夫不负有心人, 终于在另一个博客那里(http://blog.csdn.net/create115721/article/details/79238696), 我找到了解决方法:
将刚才那个__init__.py 文件中所有'utf-8'改为'gbk'如此便解决了编码的问题
安装完毕, 接下来开始打包
有和我一样忘了在 windows 的 CMD 中操作的同学请自觉复习(http://www.cnblogs.com/kekec/p/3662125.html), 我这里就是直接进入 F 盘, 输入 F:, 然后不停的 cd 到我的代码所在的文件夹
最后执行命令: pyinstaller work1.py
结果:
这样就算是大功告成了吧, 进入该目录下的 dist 文件夹打开看看, 运行. exe 文件, 和下图一样没问题可是我们还漏了一个重要的细节
因为我们没有加参数, 所以 pyinstaller 打包成散包具体参数如下:
参数 | 定义 |
-F | 指定打包后只生成一个 exe 格式的文件 |
-D | –onedir 创建一个目录,包含 exe 文件,但会依赖很多文件(默认选项) |
-c | –console, –nowindowed 使用控制台,无界面 (默认) |
-w | –windowed, –noconsole 使用窗口,无控制台 |
-p | 添加搜索路径,让其找到对应的库。 |
-i | 改变生成程序的 icon 图标 |
所以可以用参数 - F 让生成一个文件, 输入: pyinstaller -F work1.py
这个文件就可以发给你的朋友们, 打开后愉快的 happy(装 b)啦!
来源: https://www.cnblogs.com/Hangingter/p/8604255.html