zoukankan      html  css  js  c++  java
  • pyinstaller linux系统下打包python源文件

    将python程序放在其他linux服务器中执行,通常linux服务器中默认安装python2.6,很多情况下需要升级为2.7  且要安装程序中需要的第三方模块,配置较为麻烦,所以通过在本地linux环境中打包python程序,然后在其他linux服务器中直接执行打包后的文件,可以不依赖于python环境。

    使用pyinstaller 将python源文件打包成二进制文件,然后./二进制文件即可。前提是python源文件在本地linux环境能够执行成功,然后再打包。

    下面是打包过程中遇到的问题及解决方法:

    1、首先 pip install pyinstaller  

    2、然后 pyinstaller  xxx.py 

    报错:IOError: Python library not found: libpython2.7mu.so.1.0, libpython2.7.so.1.…………

    解决方法:

    查找/usr/local/lib 下有没有对应版本的libpython*.*.so文件,
    如果有则跳过这步,如果没有则需要重新安装python,在python安装配置中一定要加上--enable-shared参数,就可以生成对应动态链接库

    (libpython*.*.so这里生成的位置是在/usr/local/lib下,很多第三方库默认编译出来的位置在/usr/local/lib/下,一般这个路径里都是用户自己安装软件的共用库文件,而/usr/lib一般是系统的共用库文件)

    #./configure --enable-shared 
    #make && make install

    3、然后再次执行 pyinstaller  xxx.py 

    继续报错:error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

    解决方法:

     vi /etc/ld.so.conf   

    加入新行/usr/local/lib, 保存后,运行

        /sbin/ldconfig

        /sbin/ldconfig –v

    原因分析:

    /etc/ld.so.conf:
    这个文件记录了编译时使用的动态链接库的路径。
    默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件
    如果你安装了某些库,没有指定 --prefix=/usr 这样lib库就装到了/usr/local下,而又没有在/etc/ld.so.conf中添加/usr/local/lib,就会报错了
    刚才#./configure --enable-shared 并没有加上参数  --prefix=/usr,所以再次报错。 

    ldconfig是什么呢 :
    它是一个程序,通常它位于/sbin下,是root用户使用的东东。具体作用及用法可以man ldconfig查到
    简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件 缓存到/etc/ld.so.cache 以供使用
    因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig
    使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果
    编译过程中抱错,缺少xxx库。

    4、再次执行pyinstaller xxx.py 成功

    在当前路径下生成build 和 dist两个文件夹(build可以删除)

    其中dist文件夹下,有一个和py程序同名的文件 xxx  

    把dist文件夹放到其他linux服务器上,直接执行./xxx 即可。

  • 相关阅读:
    深度学习中的基本概念——梯度相关
    模型训练中涉及到的技巧
    ubuntu swapfile
    ubuntu install opencv
    Jetson TX1 安装ROS操作系统
    Redis介绍以及安装(Linux)
    C# url信息获取
    贝茨视觉训练法
    PHP设计模式浅析
    MySQL相关知识
  • 原文地址:https://www.cnblogs.com/who-care/p/8439407.html
Copyright © 2011-2022 走看看