linux環(huán)境打包python工程為可執(zhí)行程序的過(guò)程
本次又個(gè)需求,在ubuntu上面開(kāi)發(fā)的python代碼程序需要打包成一個(gè)可執(zhí)行程序然后交付給甲方,因?yàn)椴荒苤苯咏o源碼給甲方,所以尋找方法將python開(kāi)發(fā)的源碼打包成一個(gè)可執(zhí)行程序,注意是打包成在ubuntu上面的可執(zhí)行程序,不是打包成在window上的可執(zhí)行程序,如果需要打包成windows上的可執(zhí)行程序請(qǐng)參照此博客,鏈接:windows下打包python源碼成可執(zhí)行文件
本次在ubuntu上打包python源碼的方法和在window上打包的有點(diǎn)類似,大概流程如下:
1、在ubuntu上安裝easy_install
#sudo apt-get install python-setuptools python-dev build-essential
2、下載并安裝pyinstaller
在網(wǎng)址下載pyisntaller的包,地址:http://www.pyinstaller.org/,下載對(duì)應(yīng)的tar包
假設(shè)下載下來(lái)的包是:pyinstaller_2.1.tar.gz
然后使用命令解壓包:#tar -cf pyinstaller_2.1.tar.gz
進(jìn)入解壓后的目錄:#cd pyinstaller_2.1
最后執(zhí)行命令安裝pyinstaller:#sudo python setup.py install
如果中間沒(méi)有報(bào)錯(cuò)的話,pyinstaller就安裝完成了
3、打包python項(xiàng)目源碼
假如說(shuō)你的python源碼的結(jié)構(gòu)目錄如下:
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
圖中可以看到有兩個(gè)文件夾,兩個(gè)py源碼文件,mian.py是主函數(shù)文件
然后,我們使用命令打包源碼
#pyinstaller -F main.py
然后就會(huì)生成如下目錄
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文件夾下面就是生成的可執(zhí)行文件,可以使用命令./main執(zhí)行生成的可執(zhí)行文件
但是此時(shí)你會(huì)發(fā)現(xiàn)有問(wèn)題,因?yàn)檫@個(gè)打包的方法它只會(huì)打包當(dāng)前目錄下的所有py文件,而不會(huì)打包c(diǎn)onfig和database這兩個(gè)文件夾,所以此時(shí)的可執(zhí)行文件打包的并不完整,此時(shí)該怎么做呢,咱們接著來(lái)
4、重新打包
重新打包的的意思是需要修改那個(gè)main.spec文件,然后再使用這個(gè)文件進(jìn)行打包,操作流程如下
打開(kāi)main.spec文件,修改前如下內(nèi)容
# -*- 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文件內(nèi)容如下:
# -*- 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 )
可以看到,中間添加了添加兩個(gè)文件夾的絕對(duì)路徑,是和這個(gè)路徑相對(duì)應(yīng)的
pathex=['/home/jelly/test'],
這個(gè)路徑是之前工具自己生成的,所以我們添加的兩個(gè)目錄的絕對(duì)路徑也和它保持一致,這個(gè)修改完成后久可以了
5、編譯生成
安裝第4步的修改完成后,再執(zhí)行命令
#pyinstaller mian.spec
即可,這樣打包的程序就包含了兩個(gè)依賴的文件夾了
其實(shí)最后感覺(jué)和在window上面打包生成window上的可執(zhí)行文件的流程差不多,工具也都是用的pyinstaller打包。
感謝感謝?。?!
相關(guān)文章
Django頁(yè)面數(shù)據(jù)的緩存與使用的具體方法
這篇文章主要介紹了Django頁(yè)面數(shù)據(jù)的緩存與使用的具體方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04PyQt5每天必學(xué)之QSplitter實(shí)現(xiàn)窗口分隔
這篇文章主要介紹了PyQt5每天必學(xué)之窗口分隔,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04Python-split()函數(shù)實(shí)例用法講解
在本篇文章里小編給大家整理的是一篇關(guān)于Python-split()函數(shù)實(shí)例用法講解,有興趣的朋友們可以學(xué)習(xí)下。2020-12-12Python安裝第三方庫(kù)及常見(jiàn)問(wèn)題處理方法匯總
本文給大家匯總介紹了Python安裝第三方庫(kù)及常見(jiàn)問(wèn)題處理方法,非常的簡(jiǎn)單使用,有需要的小伙伴可以參考下2016-09-09python基于tkinter制作無(wú)損音樂(lè)下載工具(附源碼)
這篇文章主要介紹了python基于tkinter制作無(wú)損音樂(lè)下載工具(附源碼),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03python實(shí)現(xiàn)Android與windows局域網(wǎng)文件夾同步
這篇文章主要給大家詳細(xì)介紹了python實(shí)現(xiàn)Android與windows局域網(wǎng)文件夾同步,文中有詳細(xì)的代碼示例和圖文介紹,具有一定的參考價(jià)值,需要的朋友可以參考下2023-09-09Python實(shí)現(xiàn)將一段話txt生成字幕srt文件
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)將一段話txt生成字幕srt文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-02-02