win10: pyinstaller在python2和python3环境下的适应性配置

win10:pyinstaller在python2和python3环境下的适应性配置

前言

pyinstaller是一个非常优秀的python可执行程序打包工具,在windows下打包成.exe文件,在linux打包成linux下可执行文件。
最近,需要在python2和python3环境下分别使用pyinstaller进行打包,在网上搜集整理了很多资料,现在汇总如下。

相关配置

1.python安装不同版本

(1).在自定义位置,如c盘,新建python文件夹,比如 c:\python\python2 和 c:\python\python3

(2).前往官网下载好相应的python安装包,选择自定义安装(custom installation),勾选添加至系统路径,安装位置即(1)中对应文件夹.

  此时,查看系统环境变量中的Path:此电脑->鼠标右键->属性->高级系统设置->环境变量->系统变量->Path,会发现环境变量中多了几个路径:

  C:\python\python2;

  C:\python\python2\Scripts;

  C:\python\python3;

  C:\python\python3\Scripts\

  通过查看这些文件夹下的内容,可以发现,比如python2文件夹下放的是python.exe,python2\Scripts\下放的是pip.exe

  系统正是通过这两个路径找到的可执行文件,所以我们可以通过改名的方式区分python2和python3

(3).将python3文件夹下的python.exe重命名为python3.exe;

(4).调出cmd终端,分别输入python 和 python3验证版本;pip2 -V 和 pip3 -V查看版本

2.下载并配置pyinstaller

(1).更换pip下载源:

  python2:

pip2 config --global set  global.index-url https://mirrors.aliyun.com/pypi/simple/

  python3

pip3 config --global set  global.index-url https://mirrors.aliyun.com/pypi/simple/

(2).更新pip

  python2

python -m pip install --upgrate pip

  python3

python3 -m pip install --upgrade pip

(3).安装pyinstaller

  python2

pip2 install pyinstaller

  python3

pip3 install pyinstaller

(4).pyinstaller.exe安装在了Scripts目录下,因此,只需要将python3\Scripts\目录下的pyinstaller.exe改名为Pyinstaller3.exe即可;

  如果python3\Scripts\目录下有pyinstaller-script.py,将其改名为pyinstaller3-script.py

(5).在cmd命令行分别输入pyinstaller3 -v 和 pyinstaller -v查看版本,查看成功就安装成功了

脚本

1.pyinstaller打包介绍

pyinstaller -F example.py -p c:/python/python2/Lib/site-packages/

  -p后跟的是依赖库的位置,也就是site-packages的位置,这样可以将依赖库也打到可执行文件里

  如果打出来的包执行时出现了终端黑窗口,可再加一个参数-w

2.简易python打包脚本

# -*- coding:utf-8 -*-
"""
Auto Pyinstaller
-----------------------
Auther:  Brian
version: 1.0
Time: 2021-02-20
----------------------
"""
import os
import sys

# 查看python版本
import platform
version = (platform.python_version()).split(".")[0]

# 查找python 附加包位置
from distutils.sysconfig import get_python_lib
lib_path = get_python_lib()

def usage():
    print("usage python mkexe.py <file>")
    sys.exit(0)
    

argc = len(sys.argv)
if argc < 2 :
    usage()
elif argc >2:
    usage()

filename = sys.argv[1]

if version == "2":
    # cmd = "pyinstaller -F {0} -p c:\\Python27\\Lib\\site-packages\\".format(filename)
    cmd = "pyinstaller -F {0} -p {1}".format(filename, lib_path)
    print(cmd)
elif version == "3":
    # cmd = "pyinstaller3 -F -w {0} -p C:\\Python3\\Lib\\site-packages\\".format(filename)
    cmd = "pyinstaller3 -F -w {0} -p {1}".format(filename, lib_path)
    print(cmd)
else:
    print("python version: {0}, please set environment  in this file".format(version))
    sys.exit(0)
    

f = os.popen(cmd, "r")
d = f.read()
print(d)
f.close()
print("pyinstaller finished")

  执行 python mkexe.py example.py;生成的可执行文件在dist目录下

PS: 后来打包时,发现执行exe报错:RuntimeError: input(): lost sys.stdin,建议参考pyinstaller打包 input报错pyinstaller打包 input报错RuntimeError: input(): lost sys.stdin,即去掉打包中的 -w 参数。

参考

1. 查看python版本
2. 查看site-packages路径
3. os.popen()

posted @ 2021-02-20 18:23  BrianSun  阅读(1043)  评论(0编辑  收藏  举报