Python打包exe文件方法pyinstaller
Python打包exe文件方法pyinstaller
优点:
可将python文件转成可执行文件
跨平台
输出的可以是单一目录,也可以是一个单独的打好包的可执行文件。py2exe貌似输出目录。
智能支持python的第三方模块如PyQt,外部数据文件等
支持EGG格式文件
可执行文件可以用UPX压缩,二进制压缩方式
支持控制台和视窗两种方式。
可以选择exe文件的图标 (Windows only)
支持 COM server (Windows only)
缺点:
import导入的问题
安装
pip install pyinstaller
打包
pyinstaller -F app.py # 直接用这个
pyinstaller -D -p F:\Python27\Lib -i logo.ico mian.py
-D:打包成多个文件
-p:指定python安装包路径
-i:指定图标,我的图标放在同目录下
mian.py:要打包的文件,和图标放在同目录下了
多进程打包
如果py程序是多进程的话,使用pyinstaller打包会出现错误,这个时候只要加上一行代码
在:
if name==‘mian’:
#新增
multiprocessing.freeze_support()
打包文件执行路径问题解决
BASE_PATH:打包后的执行文件所在路径
if getattr(sys, 'frozen', False):
BASE_PATH = os.path.dirname(sys.executable)
elif __file__:
BASE_PATH = os.path.dirname(__file__)
下载图片工具打包
pyinstaller -F download.py
download.py
import os
import xlrd
import requests
import sys
if getattr(sys, 'frozen', False):
BASE_PATH = os.path.dirname(sys.executable)
elif __file__:
BASE_PATH = os.path.dirname(__file__)
def download_image(dirname, video_id, image_url):
"""
dirname:目录名字
video_id:保存图片到名字
image_url:图片下载地址
"""
global BASE_PATH
BASE_PATH2 = os.path.split(BASE_PATH)[0]
video_id = str(video_id).strip()
image_path = os.path.join(BASE_PATH2, "image") # 电影总目录image
if not os.path.isdir(image_path):
os.mkdir(image_path)
image_path_dir = os.path.join(image_path, dirname) # 电影目录
if not os.path.isdir(image_path_dir):
os.mkdir(image_path_dir)
image_path = os.path.join(image_path_dir, video_id) + ".jpg" # 图片路径
for i in range(10):
try:
response = requests.get(image_url, timeout=10)
if response.status_code != 200:
continue
data = response.iter_content()
with open(image_path, 'wb')as f:
for line in data:
f.write(line)
f.close()
break
except Exception as e:
continue
def get_excel_data():
"""
dirname:目录名字
video_id:保存图片到名字
image_url:图片下载地址
"""
print("开始读取文件中。。。。")
xlsfile = get_excel_dir()
# xlsfile = input("输入需要下载的excel绝对文件路径:")
book = xlrd.open_workbook(xlsfile)
sheet0 = book.sheets()[0]
video_ids = sheet0.col_values(0)
urls = sheet0.col_values(7)
lis = list(zip(video_ids, urls))
dir_name = os.path.basename(xlsfile).split(".",1)[0]
dir_name = f"视频封面-{dir_name}"
print("开始下载中。。。")
for li in lis:
video_id = li[0]
url = li[1]
try:
download_image(dir_name, video_id, url)
except:
continue
print("下载完毕!")
def get_excel_dir():
global BASE_PATH
path = os.path.split(BASE_PATH)[0]
excel_path = os.path.join(path, "excel")
exlec_list = os.listdir(excel_path)
for i, k in enumerate(exlec_list):
print(i, ":", k)
excel_number = int(input("请选择要下载的excel文件件名编号:").strip())
excel_name = os.path.join(excel_path, exlec_list[excel_number])
return excel_name
if __name__ == '__main__':
get_excel_data()
pass
选择了IT,必定终身学习