1. 程式人生 > >linux環境下使用pyinstaller分步打包python程式(使用spec檔案將python程式打包成一個可執行檔案)

linux環境下使用pyinstaller分步打包python程式(使用spec檔案將python程式打包成一個可執行檔案)

先貼上pyinstaler的官網指南,很多使用方法可以直接查到:

  • pyinstaller的安裝:

在自己的環境下執行:

pip install Pyinstaller

有什麼錯誤就根據錯誤提示去查,這個容易解決~

  • pyinstaller的初步使用:

進入程式所在的目錄下,命令列直接執行:

pyinstaller XX.py  # XX換成自己的檔名

執行可以在該目錄下得到兩個資料夾dist和build,還有一個XX.spec檔案,需要的可執行程式就在dist資料夾下。如果你的python程式沒有使用外部檔案,這時候進入dist資料夾下,命令列中使用 ./ 執行該檔案即可執行。

遇到一些錯誤如no module ...,很有可能是pyinstaller沒有自動匯入你呼叫的第三方庫,這裡貼幾篇文章作為參考。

  • pyinstaller分步生成可執行檔案

上一步中我們可以看到生成了一個spec檔案,簡單情況下,我們使用pyinstaller的一些options選項就足夠了,但在一些其他情況下,我們可以通過修改spec檔案,來對我們生成可執行檔案的過程進行自定義。

生成spec檔案可以通過命令:

pyi-makespec options name.py

其中,options和pyinstaller的options幾乎一致,可以參考官網文件:

這裡,我使用的命令如下:

pyi-makespec present_fasttext_txt.py -F --hidden-import fasttext.model

這樣生成的就是一個單一執行檔案

生成的spec可以開啟編輯:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['present_fasttext_txt.py'],
             pathex=['/home/km/PycharmProjects/fasttext'],
             binaries=[],
             datas=[],
             hiddenimports=['fasttext.model'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='present_fasttext_txt',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )

因為加了-F引數,所以沒有coll內容(查閱官網文件可以知道這個是用來在dist目錄下生成程式資料夾的)

當我們需要新增資原始檔時,在datas那個list中新增相應tuple,tuple的元素是兩個字串,第一個意為呼叫的資原始檔在系統下的路徑,第二個是該檔案相對於生成的程式的路徑,新增之後該spec檔案如下:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['present_fasttext_txt.py'],
             pathex=['/home/km/PycharmProjects/fasttext'],
             binaries=[],
             datas=[('comment_fasttext_isinv.model.bin','.'),('comment_fasttext_isneg.model.bin','.'),('comment_fasttext_issug.model.bin','.'),('comment_fasttext_isbug.model.bin','.'),('comment_fasttext_ispraise.model.bin','.')],
             hiddenimports=['fasttext.model'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='present_fasttext_txt',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )

可以看到我修改了datas部分,由於我呼叫的檔案就在我的當前目錄下,所以我直接寫的檔名,如果呼叫其他目錄下的檔案,要寫全名的,後面的‘.’,表示它存在程式的根目錄下。

這樣修改完了,執行:

pyinstaller present_fasttext_txt.spec

即可。

之後進入dist資料夾下,發現可執行程式比較大,大概有80M,應當是把資原始檔打包進去了。執行程式,發現報錯。顯示找不到檔案,經過排查發現原來還有關鍵的一步沒做。

  • 打包成一個exe之後資原始檔的路徑問題

之前的py程式中,由於資原始檔直接放在專案根目錄下面,所以呼叫的時候直接用的檔名。這導致,後面打包成exe檔案的時候,呼叫資原始檔時會在dist資料夾下搜尋檔案,當然,我的檔案打包到exe檔案中了,這樣呼叫顯然會出現找不到相應檔案的錯誤,所以,我們還要對python程式部分進行路徑上的修改。

參考博文:

要定義一個讀取相對路徑的函式:

import os, sys

def resource_path(relative_path):
    """
    定義一個讀取相對路徑的函式
      """
    if hasattr(sys, "_MEIPASS"):
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

我之前的呼叫示例如下:

classifier1 = fasttext.load_model("comment_fasttext_isinv.model.bin", label_prefix='__label__')

修改之後為:

classifier1 = fasttext.load_model(resource_path("comment_fasttext_isinv.model.bin"), label_prefix='__label__')

修改程式後,再打包,一切ok~

相關推薦

linux環境使用pyinstaller分步打包python程式(使用spec檔案python程式打包一個執行檔案)

先貼上pyinstaler的官網指南,很多使用方法可以直接查到: pyinstaller的安裝: 在自己的環境下執行: pip install Pyinstaller 有什麼錯誤就根據錯誤提示去查,這個容易解決~ pyinstaller的初步使用:

Linux安裝pyinstaller用於py檔案打包生成一個執行檔案

(2)cd pyinstaller-2.1 執行 python setup.py install 4. 拷貝py檔案 將需打包的py檔案如test.py 拷貝到當前目錄 5. 生成可執行檔案 cd到pyinstaller目錄, 執行  python pyinstaller.py test.py可能遇到的問題1

windows使用cx_freezePython程式打包exe執行檔案

1.cxfreeze安裝 https://pypi.python.org/pypi/cx_Freeze 在以上地址可下載最新版本,選擇適合自己python版本的安裝包。安裝過程中會自動識別你的pytho

python程式打包exe執行檔案

1.安裝pyinstaller模組: 2.驗證安裝成功pyinstaler,該步驟只是為了心理安慰: 3.將自己的python檔案打包成exe: 輸入命令:pyinstaller  -F    **\**\**.py,如圖裡標黃所示,-F 後面內容為你想打包

WindowsPython源代碼.py文件封裝exe執行文件方法

同時 win www http windows pos 相關 log www. 安裝pyinstaller cmd中使用pip安裝 pip install pyinstaller 同時會自動安裝pywin32(pip真慢50M這裏就走20KB),可以進行

python 打包exe執行檔案

這是我的python版本,親測可用 據說python3 直接用pyInstaller就能打包,畢竟py2exe太過陳舊了。 通過pip安裝了 Pyinstaller3.1 dos命令下 直接寫 pip install Pyinstaller,回車 等待即可,然後你可

如何Java程式打包exe執行檔案

步驟 第一步:將Java程式通過Eclipse或者JRE匯出成Jar包; 第二步:通過exe4j將Jar包程式生成exe可執行檔案。 解決java檔案編譯為class檔案時提示:“錯誤:編碼GBK

python圖片切分為九宮格 並打包exe執行檔案

前言經常在朋友圈或者微博看到九宮格顯示的圖片,雖然是九張圖片,但是這是一張圖片經過切割而成的,顯示效果很震撼。今天,我們就用python將圖片切分為九宮格,並打包成exe可執行檔案,就算不需要程式碼也可以輕鬆實現。效果微信切圖前後的對比圖:微博的切圖前後的對比圖:準備匯入需要

linux執行應用程式not found問題(交叉編譯生成的執行檔案

[email protected]:~/Desktop/em35x-ezsp$readelf -a build/ZigBee/ZigBee |grep NEEDED  0x00000001 (NEEDED)                     Shared library: [libreadli

wxPython開發總結---Python原始碼打包exe執行檔案

python的原始碼要在沒有安裝/配置Python相關開發環境的電腦上執行,那麼就需要使用工具對原始碼進行打包,在windows上執行則必須打包成exe可執行檔案,現在常用的打包工具有: py2exe

pyinstaller使用-python專案轉換exe執行檔案

Python不是每個人的計算機裡面都有安裝,當您寫了一個好用的工具,需要一個standalone exectuable環境的需求。並且用python寫些指令碼什麼的,有時候指令碼寫完以後,每次執行都得在IDE開啟在執行,很麻煩,所以經常將python編譯成exe。 本文介

Java桌面程式打包exe執行檔案

前言: 我們都知道Java可以將二進位制程式打包成可執行jar檔案,雙擊這個jar和雙擊exe效果是一樣一樣的,但感覺還是不同。其實將java程式打包成exe也需要這個可執行jar檔案。 準備: eclipse、exe4j(網上有軟體和帳號下載) 第一步,將ja

使用exe4jjava程式打包exe執行檔案

1.將java程式打包成jar 使用第三方外掛fatjar生成jar檔案,將net.sf.fjep.fatjar_0.0.31.jar直接拷貝到MyEclipse安裝目錄下的dropins資料夾中,然後重啟Eclipse即可。 重啟完成後,右擊java專案會

python檔案打包exe執行檔案

          目前有好幾種方法可以將python檔案打包成exe應用程式檔案,例如py2exe,pyinstaller等,比較下來,還是覺得pyinstaller使用起來比較簡單。   首先第一步

如何一個java程式打包一個執行程式

可以把普通的Java程式做成真正的exe,也就是單一個exe就可以在沒有安裝JVM的機器上執行。這樣的工具常見的有JET和gcj.前者是收費的,而且做出來的exe還是需要一堆dll。推薦使用gcj.他有windows和Linux版,直接下載zip包,不需要安裝,裡面有不少例子,一些build的批處理檔案。

python指令碼打包.exe執行檔案

安裝 pyinstaller pip install pyinstaller 在檔案所在目錄執行: pyinstaller -F mytest.py 手動把用到的相關資料夾移動至 .exe同級目錄下 在.exe當前目錄下執行 ./mytest.exe

Python打包 exe執行檔案

利用Python寫了一個小指令碼想要傳給使用Windows但沒有裝Python的朋友執行,這時候就可以利用將檔案包裝成exe檔案,讓沒有Python的朋友也可以執行。本篇將介紹利用套件「PyInstaller」製作exe檔。 安裝方法 # 安裝pyinstaller pip install pyin

強悍!winrar妙用-bat指令碼打包exe執行檔案並實現自動執行

轉自:https://blog.csdn.net/qq_35440678/article/details/53264410   一、背景介紹 最近有個這樣的需求,為了網頁解決IE相容問題,需實現自動檢測到使用IE開啟時下載一個離線chrome安裝包,用一個bat指令碼啟動離線的

python3.6.1 打包.exe執行檔案

環境: python3.6.1 win10 1、下載pyinstaller. 2、下載並安裝pywin32 (根據自己的python版本我的對應版本pywin32-220.win-amd64-py3.6.exe) 3、進入pyinstalle

python3.6打包exe執行檔案,已解決方案

將python程式打包成exe可執行檔案有多種方法,這裡講一種最簡單最常用的方法,只需要使用pyinstaller命令即可。 一、環境 Windows 7或10 x64 Python 3.6.1 二、需要包 pyinstaller 3.3 pywin32 這裡需