从别人那里复制了一份py文件,主要功能是通过adb命令进行微信自动加好友。
今天的任务是:在Windows环境下将这个py文件打包成exe,给公司里使用windows电脑的实习同学们使用。
py文件里import的模块有:
import sys
import os
import platform
import time
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import QtCore, QtGui, QtWidgets, Qt
from PyQt5.QtWidgets import QFileDialog
import tempfile
import re
import requests
from requests import exceptions
import xml.etree.cElementTree as ET
from PIL import Image
import cv2
import numpy as np
import itertools
import json
import subprocess
搞了一台新的windows电脑,现在开始工作啦:
一、安装python3.6.5
在新的windows电脑上首先要安装python,程序是python3.6.5写的,所以在这里也下载的python3.6.5。
下载方法:
1、进入python官网,选择downloads--windows
2、找到3.6.5版本,选择64位的executable installer。(我的电脑是64位,所以选这个)
其实我也不太懂其他几个和这个的具体区别是什么。
3、下载好之后安装即可。
这里有一个tricky的地方,所有大佬都说:“记得勾选add to path”,但是即便我勾选了,安装完成后,直接在命令面板输入python,还是提示:
‘python’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
4、解决方法:
自己设置环境变量。(百度,讲的还是比较清楚的)
把python的路径,在“我的电脑”--“属性”--“高级设置”--“环境变量”里添加到path里头去。
添加成功之后,在命令面板界面输入python --version,如果有版本提示,那就是对的啦~
二、安装pip
点击链接 https://pypi.python.org/pypi/pip#downloads ,找到如图的文件,下载即可。
windows电脑如果有RAR,应该能直接解压,我的是新电脑,还需要额外下载解压软件。
解压成文件夹之后,在命令面板里,进入该文件夹,然后输入命令:
python setup.py install
完成后,输入“pip --version”看看是否成功就好啦~
温馨提示:我在windows上一直用的是管理员权限的shell,因为发现用\users的那个命令面板,安装之后还是不成功。索性就一直用管理员的了。(原谅我一个电脑小白,根本不知道他们的学名是什么...大家意会一下吧...)
三、安装pyinstaller
搞定了pip,就可以用pip安装各种需要的模块包了。
直接在命令面板输入以下命令,等待安装完成即可。
pip install pyinstaller
四、安装程序所需的各种模块
安装了pyinstaller之后,作为一名小白选手,我直接就把py文件拷贝过来,就开始打包了;
结果得到的exe文件,运行就崩。
看了提示之后说是确实模块。
于是乖乖打开命令面板,先运行py文件。提示缺模块,然后一个一个pip安装。
这里我用的是清华镜像:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
把红框框重的命令复制,用希望安装的模块名替换“some-package”,依次安装缺失模块。
几个注意点:
1、安装PIL,直接安装不成功,所以是选择安装pillow;
2、安装cv2,也是不成功,所以先安装了numpy,再安装opencv-python,才成功;(没错,不是opencv,必须打opencv-python!!!)
安装完所有模块,在原本的文件夹里运行了py文件,顺利运行。
再次打包。进入py文件所在的文件夹,然后输入命令:
pyinstaller -F xxxxx.py
几百行代码闪过...于是打包好了,同级文件夹里会生成两个文件夹,一个.spec文件。最后的exe文件在dist文件夹中。
五、adb
当我以为已经成功的时候,哈哈哈,真是想太多了。
由于这个程序需要使用adb命令,所以在py文件原本所在的文件夹里,大佬是给了我adb.exe文件的,所以当我直接在当前文件夹运行py文件时,运行顺利。
但是当我打包py文件为exe文件时,exe文件是在和adb.exe文件不同级的下一级文件中。
所以当我直接运行exe文件时,报错。
解决方法也简单:把exe文件移到和adb.exe同级的文件夹中即可。
(这一部分,可能其他同学看不懂...涉及到业务了,要解释来龙去脉好复杂,先这样好了...大家意会以下...)
六、PyQt5.sip
adb的报错解决了,皆大欢喜了吗?naive...
当我再次运行exe文件,这一次的报错是没有module :PyQt5.sip
内心是崩溃的,这个PyQt5.sip我明明下载了,而且py文件都能运行,为什么打包出来没有呢。
问了大佬,一个大佬说:“pyinstaller是个弱智,整天干些不完整扫描环境变量的事情”。另一个大佬说:“Windows这个弱智,各种路径乱安装”,小白表示:“我可能有那么一丢丢懂了把...”
最后大佬给了一个新的打包命令:
pyinstaller -F --hidden-import PyQt5.sip xxx.py
七、大结局
再次运行,成功了。
终于可以拿去给实习同学们使用了...
耗费了整整2天,小白表示:为什么写个代码,有这么多“磨刀功”,真的很想哭啊...