python-打包exe-pyinstaller+docker-解决文件过大以及各类打包失败问题

in PYTHON with 0 comment

Docker容器打包

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。因此可以使用Docker镜像产生一个“干净”的python环境,从而顺利打包我们的python代码!

PyInstaller Docker 镜像

docker search pyinstaller

01.png

下载镜像

docker pull cdrx/pyinstaller-windows

运行镜像

docker run -it v D:/python/src:/src/ cdrx/pyinstaller-windows /bin/bash

把window的目录D:/python/src 映射到 镜像的src目录

显示容器中已经装载的python包

pip list

02.png

我们可以看到容器中初始的包很少,只有基础的几个包。
然后我们需要根据我们代码的需要导入相应的python库包

使用以下代码进行程序打包:

pyinstaller -F maopao.py

maopao.py的源码

#! -*- coding: utf-8 -*-
"""
Author: ZhenYuSha
Create Time: 2020-1-20
Info: Python打包示例1,单个文件打包
 “pyinstaller -F(单个可执行文件) 程序源 -n 程序名 -w(去掉控制台窗口,这在GUI界面时非常有用) -i 图标.ico”
 “pyinstaller -F test1/Demo_Test1_Python.py”
"""
def bubble_sort(arr):
 """
 冒泡排序
 :param arr:
 :return:
 """
 for i in range(1, len(arr)):
  for j in range(0, len(arr)-i):
   if arr[j] > arr[j+1]:
    arr[j], arr[j + 1] = arr[j + 1], arr[j]
 return arr
if __name__ == '__main__':
 test = [1, 8, 123, 18, 99, 300]
 print("************************************")
 print("*    冒泡排序    *")
 print("************************************")
 print("源列表:", test)
 result = bubble_sort(test)
 print("排序后:", result)
 print("************************************")
 input("按任意键退出...")

03.png

test.py测试源码

#!/usr/bin/python -w
# -*- coding:utf8 -*-

import os

def main():
    print("print the result of 'ls -al':")
    os.system("ls -al")

if __name__ == '__main__':
    main()
Responses