python在linux下打包程序_python在windows下打包linux程序 - CSDN
精华内容
参与话题
  • 使用PyInstaller打包python文件 和myscript.py同目录执行命令:pyinstaller mycript.py然后会看到新增加了两个目录build和dist,dist下面的文件就是可以发布的可执行文件, 你会发现dist目录下面有一堆...

    1.安装PyInstaller

        pip install pyinstaller

        pyinstaller --version

    2.使用PyInstaller打包python文件

      在和myscript.py同目录下执行命令:
    pyinstaller mycript.py然后会看到新增加了两个目录build和dist,dist下面的文件就是可以发布的可执行文件,
    你会发现dist目录下面有一堆文件,各种都动态库文件和myscrip可执行文件
    
    
    pyInstaller支持单文件模式,只需要执行:
    pyinstaller -F mycript.py
    你会发现dist下面只有一个可执行文件,这个单文件就可以发布了,可以运行在你正在使用的操作系统类似的系统的下面。


    展开全文
  • linux环境打包python工程为可执行程序

    千次阅读 2019-03-14 15:36:21
    本次又个需求,ubuntu上面开发的python代码程序需要打包成一...不是打包window上的可执行程序,如果需要打包成windows上的可执行程序请参照此博客,链接:windows下打包python源码成可执行文件 本次ubun...

    本次又个需求,在ubuntu上面开发的python代码程序需要打包成一个可执行程序然后交付给甲方,因为不能直接给源码给甲方,所以寻找方法将python开发的源码打包成一个可执行程序,注意是打包成在ubuntu上面的可执行程序,不是打包成在window上的可执行程序,如果需要打包成windows上的可执行程序请参照此博客,链接:windows下打包python源码成可执行文件

     

    本次在ubuntu上打包python源码的方法和在window上打包的有点类似,大概流程如下:

    1、在ubuntu上安装easy_install

    #sudo apt-get install python-setuptools python-dev build-essential

    2、下载并安装pyinstaller

    在网址下载pyisntaller的包,地址:http://www.pyinstaller.org/,下载对应的tar包

    假设下载下来的包是:pyinstaller_2.1.tar.gz

    然后使用命令解压包:#tar -cf pyinstaller_2.1.tar.gz

    进入解压后的目录:#cd pyinstaller_2.1

    最后执行命令安装pyinstaller:#sudo python setup.py install

    如果中间没有报错的话,pyinstaller就安装完成了

    3、打包python项目源码

    假如说你的python源码的结构目录如下:

    total 16
    drwxrwxr-x 2 jelly jelly 4096 Mar 14 15:13 config
    drwxrwxr-x 2 jelly jelly 4096 Mar 14 15:13 database
    -rw-rw-r-- 1 jelly jelly    2 Mar 14 15:13 main.py
    -rw-rw-r-- 1 jelly jelly    3 Mar 14 15:13 manager.py
    

    图中可以看到有两个文件夹,两个py源码文件,mian.py是主函数文件

    然后,我们使用命令打包源码

    #pyinstaller -F main.py

    然后就会生成如下目录

    total 28
    drwxrwxr-x 3 jelly jelly 4096 Mar 14 15:18 build
    drwxrwxr-x 2 jelly jelly 4096 Mar 14 15:13 config
    drwxrwxr-x 2 jelly jelly 4096 Mar 14 15:13 database
    drwxrwxr-x 2 jelly jelly 4096 Mar 14 15:18 dist
    -rw-rw-r-- 1 jelly jelly    2 Mar 14 15:13 main.py
    -rw-rw-r-- 1 jelly jelly  813 Mar 14 15:18 main.spec
    -rw-rw-r-- 1 jelly jelly    3 Mar 14 15:13 manager.py
    

    图中dist文件夹下面就是生成的可执行文件,可以使用命令./main执行生成的可执行文件

    但是此时你会发现有问题,因为这个打包的方法它只会打包当前目录下的所有py文件,而不会打包config和database这两个文件夹,所以此时的可执行文件打包的并不完整,此时该怎么做呢,咱们接着来

    4、重新打包

    重新打包的的意思是需要修改那个main.spec文件,然后再使用这个文件进行打包,操作流程如下

    打开main.spec文件,修改前如下内容

    # -*- mode: python ; coding: utf-8 -*-
    
    block_cipher = None
    
    
    a = Analysis(['main.py'],
                 pathex=['/home/jelly/test'],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    exe = EXE(pyz,
              a.scripts,
              a.binaries,
              a.zipfiles,
              a.datas,
              [],
              name='main',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=True,
              runtime_tmpdir=None,
              console=True )
    

    修改后的main.spec文件内容如下:

    # -*- mode: python ; coding: utf-8 -*-
    
    block_cipher = None
    
    
    a = Analysis(['main.py'],
                 pathex=['/home/jelly/test'],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    
    dict_database = Tree('/home/jelly/test/database',prefix='database')
    a.datas += dict_database
    dict_config = Tree('/home/jelly/test/config',prefix='config')
    a.datas += dict_config
    
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    exe = EXE(pyz,
              a.scripts,
              a.binaries,
              a.zipfiles,
              a.datas,
              [],
              name='main',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=True,
              runtime_tmpdir=None,
              console=True )
    

    可以看到,中间添加了添加两个文件夹的绝对路径,是和这个路径相对应的

    pathex=['/home/jelly/test'],

    这个路径是之前工具自己生成的,所以我们添加的两个目录的绝对路径也和它保持一致,这个修改完成后久可以了

    5、编译生成

    安装第4步的修改完成后,再执行命令

    #pyinstaller mian.spec

    即可,这样打包的程序就包含了两个依赖的文件夹了

    其实最后感觉和在window上面打包生成window上的可执行文件的流程差不多,工具也都是用的pyinstaller打包。

    感谢感谢!!!

     

    展开全文
  • 基于linux下python学习(封装)

    千次阅读 2018-07-23 23:10:25
    类的设计:在程序开发中,要设计一个类,通常需要满足以下三个要求: 1、类名 这类事物的名字,满足大驼峰命名法 2、属性 这类事物具有什么样的特征 3、 方法 这类事物具有什么样的行为 eg:小明今年18岁,身高...

    一、面向对象

    类的设计:在程序开发中,要设计一个类,通常需要满足以下三个要求:

    1、类名  这类事物的名字,满足大驼峰命名法

    2、属性 这类事物具有什么样的特征

    3、 方法  这类事物具有什么样的行为

    eg:小明今年18岁,身高1.75,每天早上要跑步,会去吃东西

    类名:Person()  属性:name,age,height    方法:run() eat()

    (1)

    # 小猫爱吃鱼,小猫要喝水

    class  Cat():
        def eat(self):
            print '小猫爱吃鱼'
        def  drink(self):
            print '小猫要喝水'
    tom = Cat()     # 创建猫对象
    tom.eat()
    tom.drink()


    # 小狗爱睡觉,小狗爱吃肉

    class  Dog():
        def sleep(self):
            print '小狗爱睡觉'
        def eat(self):
            print '小狗爱吃肉'
    xiaoxiao = Dog()
    xiaoxiao.sleep()
    xiaoxiao.eat()

    (2)

    class  Dog():
        def sleep(self):
            print '小狗爱睡觉'
        def eat(self):
            print '小狗爱吃肉'
    xiaoxiao = Dog()
    xiaoxiao.name = 'xiaoxiao'
    xiaoxiao.sleep()
    xiaoxiao.eat()
    print xiaoxiao
    # addr = id(xiaoxiao)
    # print '%x' %addr
    # print '%d' %addr


    #再创建一个狗对象
    benben = Dog()
    benben.name = 'benben'
    benben.eat()
    benben.sleep()
    print  benben

    (3)

    初始化方法
    我们已经知道了使用类名() 就可以创建一个对象
    当使用类名()创建对象时,python的解释器会自动执行以下操作:
    1、为对象在内存中分配空间 --创建对象
    2、调用初始化方法为对象的属性设置初始值   初始化方法(__init__)这个初始化方法就是__init__方法,是对象的内置方法

    专门是用来定义一个类具有那些属性的方法
    class  Dog():
        def  __init__(self,new_name):
            self.name = new_name
        def sleep(self):
            print '%s 爱睡觉'  % self.name
    xiaoxiao = Dog('xiaoxiao')   # 使用类名()创建对象的时候,会自动调用初始化方法__init__
    print xiaoxiao.name
    xiaoxiao.sleep()

    benben = Dog('benben')
    benben.sleep()

    二、内置方法

    (1)__del__

    1、在python中
    当使用类名()创建对象时,为对象分配万空间后,自动调用__init__
    当一个对象被从内存中销毁前,会自动调用__del__方法

    """
    class Dog():
        def __init__(self,new_name):
            self.name = new_name
            print '%s 来了' %self.name
        def __del__(self):
            print '%s 走了' %self.name
    xiaoxiao = Dog('xiaoxiao')
    print xiaoxiao.name
    print '_' * 50

    2、

    class Dog():
        def __init__(self,new_name):
            self.name = new_name
            print '%s 来了' %self.name
        def __del__(self):
            print '%s 走了' %self.name
    xiaoxiao = Dog('xiaoxiao')
    print xiaoxiao.name
    del xiaoxiao
    print '_' * 50

    (2)__str__

    1、在python中,使用python输出对象变量
    默认情况下,会输出这个变量引用的对象是由哪一个类创建的对象
    以及在内存中的地址(十六进制表示)
    如果在开发中,希望使用print输出对象变量时
    能够打印自定义的内容,就可以利用__str__这个内置方法了

    """
    class Dog():
        def __init__(self,name):
            self.name = name
    tom = Dog('tom')
    print tom

     

    2、

    class Dog():
        def __init__(self,name):
            self.name = name
        def __str__(self): #必须返回一个字符串
            return '我是%s' %self.name
    tom = Dog('tom')
    print tom

    三、封装

    1、封装是面向对象编程的一大特点

    2、面向对象编程的第一步,将属性和方法封装到一个抽象的类中

    3、外界使用类创建对象,然后让对象调用方法

    4、对象方法的细节都被封装在类的内部

    (1)

    需求:
    1、tom和xiaoxiao都爱吃东西爱跑步
    2、tom体重75
    3、xiaoxiao体重50
    4、每次跑步都会减少0.5公斤
    5、每次吃东西都会增加1公斤


    """
    class person():
            def __init__(self, name,weight):
                self.name = name
                self.weight =weight
            def __str__(self):
                return '我的名字叫%s,体重是%.2f' %(self.name,self.weight)
            def  run(self):
                print '%s 爱跑步' % self.name
                self.weight -= 0.5    # 在对象的方法内部,是可以直接访问对象的属性
            def  eat(self):
                print '%s 爱吃' % self.name
                self.weight += 1.0

    tom = person('tom',75.0)
    tom.run()
    tom.eat()
    print tom

    xiaoxiao = person('xiaoxiao',50.0)
    xiaoxiao.run()
    xiaoxiao.eat()
    print xiaoxiao

    (2)

    需求:
    1、房子有户型,总面积和家具名称列表
        新房子没有任何的家具
    2、家具有名字和占地面积,其中
      床:占4平方
      衣柜:占2平方
      餐桌:占1.5平方
    3、将以上三件家具添加到房子中
    4、打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表
    """
    class  HouseItem():
        def __init__(self, name,square):
            self.name = name
            self.square = square
        def __str__(self): #必须返回一个字符串
            return '%s的占地面积为%.2f' %(self.name,self.square)
    chuang= HouseItem ('chuang',4)
    print chuang
    yigui = HouseItem('yigui',2)
    print yigui
    canzhuo =HouseItem('canzhuo',1.5)


    class  House():
        def __init__(self,huxing,square):
            self.huxing = huxing
            self.square = square
            self.free_square = square   # 剩余面积
            self.item_list = []         # 家具名称列表
        def __str__(self):
            return '户型:%s\n总面积:%.2f\n剩余面积:%.2f\n家具列表:%s' % (self.huxing,self.square,self.free_square,self.item_list)
        def  add_item(self,item):
            print '要添加的家具%s' % item
            if item.square > self.free_square:
                print '%s面积太大无法添加' %item.square
                return
            self.item_list.append(item.name)
            self.free_square -=item.square
    my_home = House('两室一厅',180)  # 创建房子

    # 添加家具
    my_home.add_item(chuang)
    my_home.add_item(yigui)
    my_home.add_item(canzhuo)
    print my_home

    (3)

    1、士兵瑞恩有一把AK47

    2、士兵可以开火

    3、枪能够发射子弹

    4、枪能够装填子弹(增加子弹的数量)

    class  Gun():
        def __init__(self,model):
            self.model = model  #  枪的型号
            self.bullet_count = 0   #子弹的数量
        def  add_bullet(self,count):
            self.bullet_count += count
        def shoot(self):
            if self.bullet_count <= 0:  #  判断子弹的数量
                print '没有子弹了'
            self.bullet_count -= 1   #发射子弹
            print '%s 突突突 %d' %(self.model,self.bullet_count)
    class  Soldier():
        def  __init__(self,name):
            self.name = name
            self.gun = None
        def fire(self):
            if self.gun == None:
                print  '%s没有枪' %self.name
                return
            print 'go!!!'
            self.gun.add_bullet(50)
            self.gun.shoot()


    ak47 = Gun('ak47')
    ak47.add_bullet(50)
    ak47.shoot()

    ryan = Soldier('Ryan')
    ryan.gun = ak47
    ryan.fire()
    print  ryan.gun

     

    展开全文
  • linux程序打包 使用的是pyinstaller 打开终端 sudo pip pyinstaller 报错 是pip出现的bug sudo vi /usr/bin/pip 最后三行改成所示 from pip import main if name == ‘main’: sys.exit(main._main()) 输入:wq ...

    linux程序打包
    使用的是pyinstaller
    打开终端
    sudo pip pyinstaller
    报错
    是pip出现的bug
    sudo vi /usr/bin/pip
    最后三行改成下所示
    from pip import main
    if name == ‘main’:
    sys.exit(main._main())
    输入:wq
    保存退出
    再运行sudo pip pyinstaller
    安装成功
    pyinstaller --version
    进行验证
    pyinstaller就此安装成功

    展开全文
  • 咨询,windows开发的python程序,能不能直接windows下打包linux下可执行文件,在linux下装依赖包装不明白了,求老司机给普及
  • Linux下使用pyinstaller打包python程序

    万次阅读 2018-09-30 15:24:38
    下载pyinstaller 使用pip3下载源码: pip3 download pyinstaller (注意下载的位置,使用pwd命令查看) 也可以使用第三方下载,直接下载到指定的目录:...tar...
  • Python是解释性语言,我们如何将普通的Python项目(含有依赖,redis)打包成可运行的一个文件(实际为文件夹吧)。下面描述一个基本流程,供大家参考。以下流程是我们实际线上REDIS数据修改的一个需求,可以简单的...
  • python打包运行在Linux

    千次阅读 2019-10-09 17:01:19
    工具window可以打为exe,在Linux下可以打为执行程序 # 安装PyInstaller: pip install pyinstaller # 进入程序目录,用以下命令执行你的python文件 # 会生成dist目录 pyinstaller yourprogram.py # 进入dist...
  • Python开发 之 Python3打包(windows/linux)详解

    万次阅读 多人点赞 2020-04-13 09:17:52
    文章目录1、唠唠叨叨2、背景3、Python打包工具3.1、py2exe3.2、cx_Freeze3.3、PyInstaller4、Windows打包4.1、单个文件打包4.1.1、核心源码4.1.2、程序运行4.1.3、打包4.1.4、打包后效果4.2、多个文件打包4.2.1、...
  • linux下使用pyinstaller打包python脚本

    千次阅读 2018-06-14 12:43:47
    最近给运维写一个系统维护的python脚本,但是被告知生产环境有很多服务器没有安装python解释器,于是网上搜索多pyinstaller解决方案,本文简单记录之。 下载pyinstaller。 最新的pyinstaller版本为2.0版本,...
  • python文件打包为windows linux下可执行的二进制文件 日期:2018年08月15日 环境准备 确保.py文件当前python环境可正常运行 python环境建议:python3.5(官方版)pyinstaller 3.3.1 anaconda3.6...
  • Python项目打包发布方法

    万次阅读 多人点赞 2020-03-01 19:31:21
    目前python打包工具有多个,目前比较好用的为pyinstaller,该工具可以支持window和linux下使用。 windows,大小为几十K的源文件打包成exe文件,可能为几十兆,原因是把程序所引用的库文件也一起打包在一起。...
  • 背景: 利用setuptools来实现,所以先安装setuptools,其实Python2.7.9及之后的版本都自带安装setuptools了,无需另外安装 如果没有安装setuptools的直接下载源码包解压安装就行了 示例:以linux环境为例 1....
  • 如何将python3.6软件的py文件打包成exe程序

    万次阅读 多人点赞 2017-09-30 19:42:26
    我们完成一个Python项目或一个程序时,希望将Python的py文件打包Windows系统直接可以运行的exe程序浏览网上的资料来看,有利用pyinstaller和cx_Freeze进行打包的方法。关于cx_Freeze打包的方法,可以...
  • Windowspython转化成可执行程序还是比较简单,用py2exe就可以了。Linux下比较方便的有这么几种:1. py2installer
  • python用cx_Freeze打包程序

    万次阅读 2013-12-27 23:59:05
    在python中比较常用的转exe方法有三种,分别是cx_freeze,py2exe,PyInstaller。py2exe恐怕是三者里面知名度最高的一个,但是同时相对来说它的打包质量恐怕也是最差的一个。pyinstaller打包很好,但是操作工序较为...
  • 首先,需要明确的一点是,必须 windows 安装 python,并且用 windows python 来执行打包的操作,才可以得到 exe 可执行程序(可以先 linux 完成调试)。 因为无论是 py2exe 还是 pyinstaller,都是针对...
  • Python 如何将项目打包成exe可执行程序

    万次阅读 多人点赞 2019-05-23 13:51:29
    大家都知道,Python是一种脚本语言,也就是解释型的语言,需要解释器来进行解释以后才可以执行,而Python源代码需要在Python虚拟机上面运行,但是我们做好的程序,不可能给用户使用的时候还让他安装一个Python环境,...
  • 事情是这样的我用打包命令:pyinstaller -F E:\python\clpicdownload\mypython.py打包了一个exe程序,但是运行时提示我缺 少bs4模块然后我就去查pyinstaller的使用方法,找到pyinstaller有一个-p参数: 1.设置导入...
  • PyInstaller是一个十分神奇的第三方库,它能够Windows、Linux、 Mac OS X 等操作系统Python 源文件打包,通过对源文件打包Python 程序可以没有安装 Python 的环境中运行(包括引用的第三方库),也可以...
1 2 3 4 5 ... 20
收藏数 25,387
精华内容 10,154
关键字:

python在linux下打包程序