• python打包成为exe文件


    pyinstaller 库的使用

    PyInstaller是一个十分有用的第三方库,它能够在Windows、Linux、Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包,Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个独立文件方便传递和管理。PyInstaller 需要在命令行(控制台)下用pip 工具安装,如下:
    :>pip install pyinstaller
     
    :>pip3 install pyinstaller

    PyInstaller 的官方网站网址为 http://www.pyinstaller.org/。PyInstaller 库会自动将 PyInstaller 命令安装到 Python 解释器目录中,与 pip 或 pip3 命令路径相同,因此可以直接使用。使用PyInstaller 库十分简单,请注意,由于 PyInstaller 不支持源文件命中有英文句号(.)存在,假设 dpython.py 文件在 D:codes 目录中,命令如下:

    :>pyinstaller dpython.py
    :>pyinstaller D:codesdpython.py
    执行完毕后,源文件所在目录将生成 dist 和 build 两个文件夹。其中,build 目录是 pyinstaller 存储临时文件的目录,可以安全删除。最终的打包程序在 dist 内部的 dpython 目录中。目录中其他文件是可执行文件 dpython.exe 的动态链接库。可以通过-F 参数对 Python 源文件生成一个独立的可执行文件,如下:
    :>pyinstaller -F dpython.py
    执行后在 dist 目录中出现了 dpython.exe 文件,没有任何依赖库,执行它即可。使用 PyInstaller 库需要注意以下问题:文件路径中不能出现空格和英文句号(.);源文件必须是 UTF-8 编码,暂不支持其他编码类型。采用 IDLE编写的源文件都保存为 UTF-8 编码形式,可直接使用。PyInstaller 有一些常用参数,如下所示:
    -h, --help 查看帮助
    -v, --version 查看 PyInstaller 版本
    --clean 清理打包过程中的临时文件
    -D, --onedir 默认值,生成 dist 目录
    -F, --onefile 在 dist 文件夹中只生成独立的打包文件第 
    -p DIR, --paths DIR 添加 Python 文件使用的第三方库路径
    -i <.ico or .exe,ID or .icns>,--icon <.ico or .exe,ID or .icns >指定打包程序使用的图标(icon)文件

    PyInstaller 命令不需要在 Python 源文件中增加代码,只需要通过命令行进行打包即可。-F 参数最为常用,对于包含第三方库的源文件,可以使用-p 添加第三方库所在路径。如果第三方库由 pip 安装且在Python 环境目录中,则不需要使用-p 参数。

     

     

    python打包发布

    跟所有python小白一样,我也遇到了python打包发布的问题!

    进过2天的不断百度谷歌,终于解决了这个蛋疼的问题;过程中遇到了一些问题,记录下来以免遗忘!

    先用了py2exe,由于项目里面需要访问oracle数据库,导入cx_oracle模块,就是这个蛋疼的东西坑咯!

    安装cx_oracle的过程就不多说了 这个帖子讲得很清楚:http://evil850209.iteye.com/blog/1394932

    Oracle Instant Client 设置环境变量是让python可以取到oci.dll,所以很多人把oci.dll, oraocci11.dll,oraociei11.dll都放到了Python27Libsite-packages目录下面,也能解决问题;

    用py2exe打包后  dist里面有一个msvcp80.dll的文件,系统版本不一样名称不一样,有可能是msvcp90.dll、msvcp71.dll

    这样打包就完成了, 问题也来了, 用64位的python,其它模块都是64位的,打包出来的64位程序在64位系统上运行没有问题, 用32位的python(其它也是32位)打包出来的程序在windows server 2003服务器系统上,始终不能正常运行,经调试是导入cx_oracle模块出错,“ Loaded failed ,找不到指定的模块”  复制各种dll进去都没解决到;最后放弃py2exe

    改用pyinstall

    1、下载pyinstaller

    目前pyinstaller支持的python版本为2.3-2.7,可以到http://www.pyinstaller.org/官网下载。

    2、安装

    下载完成后,解压即可。

    3、pyinstaller使用方法

    使用也非常的简单,cmd下进入解压出来的目录,执行如下命令。

    python pyinstaller.py [opts] yourprogram.py

    主要选项包括:

    -F, –onefile 打包成一个exe文件。 -D, –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)。 -c, –console, –nowindowed 使用控制台,无界面(默认) -w, –windowed, –noconsole 使用窗口,无控制台

    更详细的使用方法请参考下载包里的doc目录下的Manual.html文件。

    使用pyinstall的问题:

     

    打包时出现类似这种情况:

    File "C:Python27libctypesutil.py", line 54, in find_library
        fname = os.path.join(directory, name)
    File "C:Python27lib
    tpath.py", line 108, in join
        path += "\" + b
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc1 in position 9: ordinal not in range(128)
    

    【原因】

    安装过程需要访问用户文件夹:

    5490 INFO: Updating manifest in C:Users梁鑫辉AppDataRoamingpyinstallerincache00_py27_32bitpython27.dll
    

    如果用户名是中文,不识别。

    【解决办法】

    修改ntpath.py,将import sys改为:

    import sys
    reload(sys)
    sys.setdefaultencoding("gbk")
    

    问题2:manifest could not be extracted

    【现象】

    程序运行时出现这个错误:

    manifest could not be extracted

    【原因】

    不明。

    【解决办法】

    开始用

    python pyinstaller.py -F test.py
    打包成一个单一的文件,
    换成
    python pyinstaller.py -D test.py
    生成一个目录 ,这样会把所有需要的dll都放在目录下面;解决问题;

    py2exe 和pyinstall 的对比; pyinstall会把需要的dll文件都复制过来,比较齐全;适合windows;在百度的时候看到有人说 py2exe是 用什么系统打包发布的,运行环境也最好是同样的系统,未证实;


    通过
    python pyinstaller.py -D test.py 完美解决windows server 2003 无法导入cx_oracle模块的问题;
     
  • 相关阅读:
    ResponsibleChain(责任链模式)
    IteratorPattern(迭代子模式)
    为什么抽象类不能实例化却有构造方法
    ObserverPattern(观察者模式)
    TemplateMethod(模块方法模式)
    java 定义一个同步map内存去重法
    oracle sql修改序列为当前序列开始
    oracle sql 当初始化数据时避免重复主键
    搭建基于express框架运行环境
    vue路由基础介绍
  • 原文地址:https://www.cnblogs.com/sunshuhai/p/9326550.html
Copyright © 2020-2023  润新知