zoukankan      html  css  js  c++  java
  • python源文件转换成exe问题解决贴

    项目上做一个小工具,通过webservice接口实现配置下发。python文件调试通过了,想把它抓换成exe,网上查了下,得知有py2exe这个好用精简的小工具,本以为分分钟搞定的事情,结果经历了九转十八弯。在此把遇到的坑和填坑的手段一一记录一下,希望不要忘记。

    py2exe官网上提供了一个特别精简的例子,setup.py中仅那么几行代码:

    from distutils.core import setup
    import py2exe

    setup(console=["helloworld.py"])

    其中helloworld.py是待转换的python文件。实际上setup的函数选项远不止一个console,且这种最精简的写法无法满足更高级的需要,例如有第三方库,例如py文件中图片甚至音频文件链接等等。更多的应用要去查官方文档,这里本人唯一要使用到的是第三方库。

    网上查找的参考代码如下:

    # coding=utf8
    
    from distutils.core import setup  
    import py2exe  
    
    extra_modules = ["bs4"]
    
    options = {"py2exe":
                    {"compressed": 1,
                     "optimize": 2,
                     "bundle_files": 1, # 表示把所有文件打包进exe可执行程序
                     "packages": extra_modules,
                     #"includes": extra_modules
                    }
              }
    setup(
        version = "1.0.0",
        description = "test for py2exe",
        name = "Py2exeTest",
        options = options,
        zipfile = None,
        console = [{"script": "app_main.py"}]
    )

    其中几个重要的参数:

    console = [{"script": "app_main.py"}] 表示这是个控制台程序,希望把app_main.py打包成exe程序。这里把app_main.py换成自己的python脚本名即可

    zipfile = None 默认py2exe会生成一个library.zip的库文件;此处为None,则不生成改文件,把它打包到exe文件。对于该选项,本人尝试编却一直编不过,报configParser的错误,网上也没找到解决办法,最后看到有人说打包编可能存在失败概率,反正也不要求这个,就把打包的相关选项都去掉了。一试编过了。

    "packages": extra_modules 指定依赖的其它模块。在我使用过程中,实际上packages和includes选项都需要,缺一个就报configParser错误,此处我用到的suds和paramiko,因此extra_modules写了两个库

    "bundle_files": 1 表示要把所有文件打包成一个 exe可执行程序

    几经波折后,setup,py文件代码如下:

    # coding=utf8
    
    from distutils.core import setup  
    import py2exe  
    
    extra_modules = ["suds","paramiko"]
    
    options = {"py2exe":
                    {
                     "packages": extra_modules,
                     "includes": extra_modules
                    }
              }
    setup(
        version = "1.0.0",
        description = "test for py2exe",
        name = "Py2exeTest",
        options = options,
        console = [{"script": "test.py"}]
    )

    以为到这就完了,编的时候还是报了各种错,其中最主要的是找不到库的错,如

    "no module named paramiko"

    "no module named ecdsa"

    吧啦吧啦

    又是去求助万能的互联网,网上说py2exe不支持egg模块的包,解决办法是把报错的库的包(Python安装路径,一般是c:python27libsite-packages)的egg文件中,同名的文件夹解压出来,放入python库中(c:python27libsite-packages)。有些拗口,就这么个意思,最后问题解决,在dist下出现了想要的exe文件,执行正常。

  • 相关阅读:
    DetailsView应用之雕虫小技
    Javascript 调用C# 代码并传递参数的两种方法
    一键还原后,重装一遍 bartender7.75软件, 添加空白标签的时候提示 无法找到字体,无法在没文字情况下运行 求电脑帝解释
    JS处理Enter键触发执行的操作
    SoundManager 2 实现web页面中嵌入声音播放
    用Nexus搭建Maven远程仓库[私服]
    AmCharts一款统计图表及股票图表的插件
    HTML5添加网页音效
    Jquerymenuaim流畅的菜单滑动体验
    UML之JUDE{Astah}使用介绍
  • 原文地址:https://www.cnblogs.com/jingmu/p/8033464.html
Copyright © 2011-2022 走看看