linux环境打包python工程为可执行程序的过程

 更新时间:2024年01月29日 10:08:12   作者:Jelly-小丑鱼  
本次需求,在ubuntu上面开发的python代码程序需要打包成一个可执行程序然后交付给甲方,因为不能直接给源码给甲方,所以寻找方法将python开发的源码打包成一个可执行程序,本次在ubuntu上打包python源码的方法和在window上打包的有点类似,感兴趣的朋友跟随小编一起看看吧

本次又个需求,在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打包。

感谢感谢!!!

相关文章

  • TensorFlow实现RNN循环神经网络

    TensorFlow实现RNN循环神经网络

    这篇文章主要介绍了TensorFlow实现RNN循环神经网络,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Python实现处理逆波兰表达式示例

    Python实现处理逆波兰表达式示例

    这篇文章主要介绍了Python实现处理逆波兰表达式操作,结合实例形式分析了逆波兰表达式的概念、原理及Python针对逆波兰表达式的定义与计算相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • 一文详解Python集合与不可变集合

    一文详解Python集合与不可变集合

    在Python的广阔天地中,数据结构如同繁星点点,各有其独特的光芒,今天,让我们一同走进集合(set) 与不可变集合(frozenset) 的奇妙世界,需要的朋友可以参考下
    2026-02-02
  • Python将HTML快速转换成PDF的方法实现

    Python将HTML快速转换成PDF的方法实现

    在Web开发和报告任务中,将HTML内容转换为PDF是一种常见需求,本文主要介绍了Python将HTML快速转换成PDF的方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Python实现批量合并多个txt文件并生成Excel文件

    Python实现批量合并多个txt文件并生成Excel文件

    在数据处理中,有时会面临合并多个文本文件的任务,本文将详细介绍如何使用Python批量合并多个txt文件,并将其生成为一个Excel文件,需要的可以参考下
    2023-12-12
  • Python中Playwright 与 pyunit 结合使用详解

    Python中Playwright 与 pyunit 结合使用详解

    这篇文章主要介绍了Python中Playwright 与 pyunit 结合使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Linux环境下Python3.10安装实践

    Linux环境下Python3.10安装实践

    作者在CentOS7.8上安装Python3.10并替换python软链接为python3后,导致yum命令不可用,文中详细记录了解决过程,包括安装Python3.10的步骤和修改python软链接的操作,最后成功恢复了yum命令
    2026-04-04
  • 用pushplus+python监控亚马逊到货动态推送微信

    用pushplus+python监控亚马逊到货动态推送微信

    这篇文章主要介绍了用pushplus+python监控亚马逊到货动态推送微信的示例,帮助大家利用python抢购商品,感兴趣的朋友可以了解下
    2021-01-01
  • 使用python爬虫实现网络股票信息爬取的demo

    使用python爬虫实现网络股票信息爬取的demo

    下面小编就为大家分享一篇使用python爬虫实现网络股票信息爬取的demo,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • python绘制堆叠条形图介绍

    python绘制堆叠条形图介绍

    大家好,本篇文章主要讲的是python绘制堆叠条形图介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12

最新评论