由于同事辞职,许多运维工具的维护工作就交到我这里处理了,运维居然没人会Python脚本!

用Selenium编写的一个爬虫脚本cctv.py,需要给不懂软件的人运行。为了不让他去搭建,安装各种包,库,所以将脚本打包成exe文件给他直接使用。

运行环境Ubuntu-16.04

所需要的基本工具:

1. Pyinstaller:打包工具

2. xvfb: 虚拟显示框架

一. 安装Pyinstaller

注意:如果你要在Linux下运行,那么就在Linux下打包编译。
    zhuben@zb:~$ pip install pyinstaller

下载的是3.2版本。

二. 安装xvfb

    zhuben@zb:~$ sudo apt-get install xvfb

下载后我没有测试过,下载过程没有报错就OK,如果要测试是否成功,可以在网上搜索。

三. 打包cctv.py脚本

    zhuben@zb:~$ pyinstaller --onefile cctv.py

运行之后会看到很多打印信息。完成后会生成build\dist\文件夹,cctv.spec文件

生成的exe文件其实是根据.spec文件中的内容来生成的,可以打开查看。

如果已经有了.spec文件,就可以直接运行

    zhuben@zb:~$ pyinstaller cctv.spec

进入dist\文件夹会发现cctv.exe文件。如果想了解更多参数,可以参考官方文档

运行试试看

如果出现IOError:/tmp/_MEISGj2tQ/selenium/webdriver/firefox/x86/x_ignore_nofocus.so之类的缺少文件错误。那就需要修改.spec文件

原内容为:

a = Analysis(['main.py'],
pathex=[...],
binaries=None,
datas=None,
...)

要手动将缺少的文件路径加上去

改为:

a = Analysis(['main.py'],
pathex=[...],
binaries=None,
datas=[
('/usr/lib/python2.7/site-packages/selenium/webdriver/firefox/x86/x_ignore_nofocus.so', 'selenium/webdriver/firefox/x86'),
('/usr/lib/python2.7/site-packages/selenium/webdriver/firefox/amd64/x_ignore_nofocus.so', 'selenium/webdriver/firefox/amd64')
],
...)

以上路径需要改为你自己机子上.so文件所在路径

内容来自参考:Pyinstaller遇到的问题

解决之后,发现没有出现Runtime问题了,但是有WebDriverException:

selenium.common.exceptions.WebDriverException: Message: The browser appears to have exited before we could connect.

这就是因为没有显示器的原因,所以需要xvfb搭建一个虚拟的环境。关于xvfb的更多内容可以自行搜索

四. 使用xvfb

    zhuben@zb:~$ Xvfb -ac :10 &
zhuben@zb:~$ export DISPLAY=:10 #将显示连接到xvfb所创建的环境

再来运行cctv.exe,发现可以正常运行了.

或者执行

    zhuben@zb:~$ xvfb-run --auto-servernum --server-args="-screen 0 1280x760x24"  ./cctv.exe

五. 优化

如果每次需要运行脚本的时候都加上这么多命令的话,很是不方便。所以,我就将xvfb的启动/关闭命令加到了爬虫脚本中

if __name__ == "__main__":
os.system("nohup Xvfb -ac :10 &")
main()
os.system("sudo killall Xvfb")

然后用sudo ./cctv.exe执行

但是这样加上去是不能执行的,原因就是缺少了设置DISPLAY变量 export DISPLAY=:10

但是Python脚本中是加入不了export 命令的。原因参考:How to user export in Python on Linux

所以:要么执行sudo ./cctv.exe之前,执行export DISPLAY=:10;要么就将export DISPLAY=:10加入到.bashrc中去。

六.遇到的问题

1.Exec format error.Binary file not executable:

文件格式错误,确保你的exe文件是在你当前的系统中生成的。虽然Pyinstaller是跨平台的,但是他打包之后的exe文件并不能跨平台执行。也就是说,在win下打包生成的exe文件只能在win下运行;在linux下打包生成的exe文件,只能在linux下运行。开始并不知道这个,总是在win下打包好后,传到ubuntu下去运行

2.开启了xvfb,但是还是提示WebDriverException:

确保你的DISPLAY 的值和你xvfb设置的值是一致的。xvfb设置为 :10, 那么你就需要 export DISPLAY=:10。可以输入export查看所有变量

七. 其他

可以看看Nuitka,介绍

Pyinstaller打包Selenium脚本为exe文件执行问题的更多相关文章

  1. PyInstaller打包Python脚本为exe

    1.PyInstaller-3.1.1  百度云链接  http://pan.baidu.com/s/1jHYWin8 密码  oapl 2.安装最新版本的 pywin32-217.win32-py2 ...

  2. “failed to excute script xxx” PyInstaller 打包python程序为exe文件过程错误

    在使用PyInstaller打包python程序,打包命令为: pyinstaller -F -w -i manage.ico yourpyfile.py 顺便说一下几个参数的作用 -F:是直接生成单 ...

  3. pyinstaller 打包selenium脚本 取消cmd

    更改源代码 找到文件(selenium->webdriver->common->service.py) 添加一个参数

  4. 打包python脚本为exe可执行文件-pyinstaller和cx_freeze示例

    本文介绍使用cx_freeze和pyinstaller打包python脚本为exe文件 cx_freeze的使用实例 需要使用到的文件wxapp.py, read_file.py, setup.py ...

  5. 打包python脚本为exe的坎坷经历, by pyinstaller方法

    打包python脚本为exe的坎坷经历, by pyinstaller方法 又应验了那句歌词. 不经历风雨, 怎么见得了彩虹. 安装过程略去不提, 仅提示: pip install pyinstall ...

  6. sublime添加自己的编译环境_添加一个.app或者.exe文件执行脚本

    如何添加一个.app或者.exe文件执行脚本 看了很多简书和博客,还是搞不好,最后参考官方文档搞定了: http://www.sublimetext.com/docs/3/build_systems. ...

  7. Pyinstaller打包selenium去除chromedriver黑框问题解决!!!

    Pyinstaller打包selenium去除chromedriver黑框问题解决!!!     问题描述 [1123/101706.932:ERROR:gpu_process_transport_f ...

  8. PyInstaller打包python脚本的一些心得

    PyInstaller打包python脚本的一些心得 因为在公司经常要帮同事做一个从excel表格中提取出需要的内容的重复工作,比较繁琐还容易出错:于是就想着要写个程序,但是同事又不可能在电脑上也装上 ...

  9. pyinstaller打包.py程序为.exe操作指南

    pyinstaller打包.py程序为.exe操作指南 20190526内容纲要: 1.pyinstaller安装 2.程序封装 3.可执行程序 0 前言 今天第一次试试将一个py程序封装成一个.ex ...

随机推荐

  1. 微信聊天记录查看器(程序+源码) - iOS版

    本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/4338643.html Updates [2016.10.14]感谢 ...

  2. asp.net sqlite 当插入数据后的第一次访问会变的很慢!

    <add key="ConnectionStringSQLite" value="data source=|path|DB/XXX.db;Version=3;&qu ...

  3. 【转】PowerShell入门(十):使用配置文件

    转至:http://www.cnblogs.com/ceachy/archive/2013/03/01/PowerShell_Profile.html 在命令行中定义别名.变量和函数,只是将它们添加在 ...

  4. VM VirtualBox 安装 Android 4.3虚拟机完整教程

    大家好,今天给大家带来一篇安装安卓虚拟机的教程! 好了,现在开始我们的教程! 一.安装准备 1.Android 4.3安装镜像(文件名:android-x86-4.3-20130725.iso) 电脑 ...

  5. 如何使用查尔斯代理抓取https请求

    首先 查尔斯代理是一个很不错的抓包工具 有适合各种系统的版本 最近http的请求几乎铺天盖地的已经变为了https了  其中的好处有很多  更加安全(http://www.cnblogs.com/lo ...

  6. Flags-Ural1225简单递推

    Time limit: 1.0 second Memory limit: 64 MB On the Day of the Flag of Russia a shop-owner decided to ...

  7. mariadb:InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes

    mariadb 启动中 InnoDB: Error: log file ./ib_logfile0 is of different size 0 起因:线上正在运行的系统,因为需要调整性能,变更了my ...

  8. RStudio中,出现中文乱码问题的解决方案

    RStudio中,出现中文乱码问题的解决方案解决步骤:1.设置RStudio文本显示的默认编码:RStudio菜单栏的Tools -> Global Options2.选择General -&g ...

  9. 3.mvc core 文件目录详细的解释

    wwwroot 放js css image的文件夹,静态文件. favicon.ico 网站图标.上传文件的话最好在里面新建一个Upload的文件夹进行管理 Controllers 控制器, View ...

  10. 第二,C语言示例

    #include<stdio.h> int main (void)                 /*WTF*/ { int num; num=1; printf(" I am ...