最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3+PyInstall+Sciter解決報錯缺少dll、html等文件問題

 更新時間:2019年07月15日 09:31:21   作者:TopherNie  
這篇文章主要介紹了Python3+PyInstall+Sciter解決報錯缺少dll、html等文件問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

1 調試過程

用Python3.6+Sciter+PyCharm寫了一個py測試腳本helloworld.py,該腳本中只含有一條語句“import sciter”。在PyCharm中運行之,未報錯。

#helloworld.py
import sciter

然后將該腳本用PyInstaller打包成exe文件,打包程序pack.py如下:

#pack.py
from PyInstaller.__main__ import run
if __name__ == '__main__':
  opts = [
      # 字符串前加“r”,防止字符轉義
      # r'--hidden-import=py4j.java_collections',\
      # 要打包的Python文件
      r'D:\work\python\my_editor\helloworld\helloworld.py',\
      # -F, –onefile 打包一個單個文件,如果你的代碼都寫在一個.py文件的話,可以用這個,如果是多個.py文件就別用
      # '-F',\
      # -w:制作窗口程序,與之相對的-c意味制作命令行程序(默認)。--distpath指定打包的目的地路徑
      r'-w','--distpath=D:\work\python\my_editor\helloworld\dist',\
      # --workpath 指定工作路徑
      r'--workpath=D:\work\python\my_editor\helloworld\out',\
      # --specpath指定.spec文件保存路徑
      r'--specpath=D:\work\python\my_editor\helloworld\out',\
      # --icon 指定exe文件的圖標
      r'--icon=D:\work\python\my_editor\ico\text.ico',\
      # --upx-dir 使用upx壓縮
      r'--upx-dir','upx393w',\
      # --add-data 指定要包含的資源文件。
      # “C:\\Windows\\System32\\sciter.dll”為資源文件原本所在路徑(source)。
      # “.”為相對于exe文件的路徑(destination),在這里“.”為同一目錄的意思。
      # source路徑與destination路徑以英文狀態(tài)下分號“;”隔開。
      # r'--add-data', 'C:\\Windows\\System32\\sciter.dll;.', \
      # r'--add-data', 'D:\\work\\python\\my_editor\\helloworld\\pages\\word.html;pages'
      ]
  run(opts)

打包過程未報錯,但打包后執(zhí)行exe文件就出現(xiàn)問題了,如下圖,報錯“Failed to execute script helloworld”。

 

就這么一句話,沒有其他任何的報錯信息,很令人惱火。后來查了資料,發(fā)現(xiàn)在打包時,可以指定exe以命令行模式執(zhí)行,就能看到報錯信息,而非以當前的窗口模式執(zhí)行。即將上述pack.py腳本中的opts選項列表里的“-w”改為“-c”。

再次打包執(zhí)行exe文件,發(fā)現(xiàn)了彈出了一個含有報錯信息的窗口。但是窗口一閃即逝,根本看不清里面的報錯信息。這是因為程序拋出異常退出了;即使不拋出異常,窗口也會因程序執(zhí)行完成而消失。于是將主程序helloworld.py的代碼改為如下:

#helloworld.py
import traceback
#加上try-except語句,是為了防止程序在出現(xiàn)異常時奔潰退出。
try:
  import sciter
except Exception as e:
  #打印異常棧軌跡。
  traceback.print_exc()
  #使程序阻塞,防止程序執(zhí)行完畢退出。
  a = input()

再次打包執(zhí)行exe文件,能看到報錯信息了,如下圖。其中的核心信息是“ImportError: C:\Windows\System32\sciter.dll was not found in PATH”,即缺少sciter.dll文件。

這就很奇怪了,在PyCharm中運行時沒報這個錯啊!查看PyInstaller官網(wǎng),得知PyInstaller打包后的exe程序不能自動識別資源文件(如dll、html、png等文件)的路徑,需要在spec文件中指定datas選項。比如下面的helloworld.spec片段,添加了sciter.dll文件到與exe文件同級的目錄(.)中;添加了word.html到比exe文件所在目錄更深一層的目錄(pages)中(若是只報錯缺少dll文件,可不指定html文件)。

#helloworld.spec片段

a = Analysis(['D:\\work\\python\\my_editor\\helloworld\\helloworld.py'],
       pathex=['D:\\work\\python\\my_editor\\helloworld\\out'],
       binaries=[],
       datas=[('C:\\Windows\\System32\\sciter.dll', '.'), ('D:\\work\\python\\my_editor\\helloworld\\pages\\word.html', 'pages')],
       hiddenimports=[],
       hookspath=[],
       runtime_hooks=[],
       excludes=[],
       win_no_prefer_redirects=False,
       win_private_assemblies=False,
       cipher=block_cipher,
       noarchive=False)

但每次執(zhí)行完打包程序后,還要手動修改spec文件,很是麻煩。通過調試PyInstaller源代碼,找到了另一種方法,即在pack.py打包程序中的opts選項列表里加上兩個“--add-data選項”,如下:

#helloworld.py片段

opts = [
    """
    其他選項與上面的helloworld.py同,此處省略。
    """
    # --add-data 指定要包含的資源文件。
    # “C:\\Windows\\System32\\sciter.dll”為資源文件原本所在路徑(source)。
    # “.”為相對于exe文件的路徑(destination),在這里“.”為同一目錄的意思。
    # source路徑與destination路徑以英文狀態(tài)下分號“;”隔開。
    r'--add-data', 'C:\\Windows\\System32\\sciter.dll;.', \
    r'--add-data', 'D:\\work\\python\\my_editor\\helloworld\\pages\\word.html;pages'
    ]

再次打包運行exe文件,執(zhí)行成功!

2 要點總結

(1)調試打包時,指定PyInstaller打包程序參數(shù)為“-c”(命令行模式),方便閱讀報錯信息。等到調試完成正式上線后再改為“-w”。

(2)通過捕捉異常和使程序阻塞,防止程序過早退出,以便于看清楚報錯信息。

(3)PyInstaller打包后的exe程序不能自動識別資源文件(如dll、html、png等文件)的路徑,需要在spec文件中指定datas選項,或者在PyInstaller打包程序參數(shù)中指定一個或多個“--add-data”選項。

總結

以上所述是小編給大家介紹的Python3+PyInstall+Sciter解決報錯缺少dll、html等文件問題 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

相關文章

  • 基于Tensorflow搭建一個神經(jīng)網(wǎng)絡的實現(xiàn)

    基于Tensorflow搭建一個神經(jīng)網(wǎng)絡的實現(xiàn)

    神經(jīng)網(wǎng)絡可能會讓人感到恐懼,特別是對于新手機器學習的人來說。這篇文章主要介紹了基于Tensorflow搭建一個神經(jīng)網(wǎng)絡的實現(xiàn),從入門開始,感興趣的可以了解一下
    2021-05-05
  • 詳解python os.walk()方法的使用

    詳解python os.walk()方法的使用

    今天給大家?guī)淼氖顷P于Python的相關知識,文章圍繞python os.walk()方法的使用展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python+LyScript實現(xiàn)自定義反匯編

    Python+LyScript實現(xiàn)自定義反匯編

    LyScript?插件默認提供了一個get_disasm_code()方法可以直接獲取到指定行數(shù)的反匯編代碼。本文將利用LyScript實現(xiàn)自定義反匯編,感興趣的可以了解一下
    2022-07-07
  • python 利用matplotlib在3D空間中繪制平面的案例

    python 利用matplotlib在3D空間中繪制平面的案例

    這篇文章主要介紹了python 利用matplotlib在3D空間中繪制平面的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • python中numpy的矩陣、多維數(shù)組的用法

    python中numpy的矩陣、多維數(shù)組的用法

    本篇文章主要介紹了python中numpy的矩陣、多維數(shù)組的用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • python內置函數(shù)之slice案例詳解

    python內置函數(shù)之slice案例詳解

    這篇文章主要介紹了python內置函數(shù)之slice案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-09-09
  • 使用 Python 解析配置文件格式

    使用 Python 解析配置文件格式

    選擇配置格式是一種微妙的權衡。但是,一旦你做出決定,Python 就可以使用少量代碼來解析大多數(shù)流行的格式。今天通過本文給大家分享 Python 解析配置文件格式的問題,感興趣的朋友一起看看吧
    2021-07-07
  • Python中return函數(shù)返回值實例用法

    Python中return函數(shù)返回值實例用法

    在本篇文章里小編給大家整理的是一篇關于Python中return函數(shù)返回值實例用法,有興趣的朋友們可以學習下。
    2020-11-11
  • Python 詳解基本語法_函數(shù)_返回值

    Python 詳解基本語法_函數(shù)_返回值

    這篇文章主要介紹了Python 詳解基本語法_函數(shù)_返回值的相關資料,需要的朋友可以參考下
    2017-01-01
  • 超簡單的Matplotlib安裝與配置教程

    超簡單的Matplotlib安裝與配置教程

    Matplotlib是Python的第三方繪圖庫,它非常類似于MATLAB,在使用Matplotlib軟件包之前需要對其進行安裝,這篇文章主要給大家介紹了關于Matplotlib安裝與配置的相關資料,需要的朋友可以參考下
    2023-09-09

最新評論

泉州市| 济阳县| 厦门市| 晋中市| 桐梓县| 佛坪县| 清镇市| 盈江县| 富阳市| 延边| 昭苏县| 武汉市| 甘南县| 岑巩县| 邢台县| 安乡县| 铅山县| 耿马| 芦溪县| 威远县| 两当县| 柯坪县| 延边| 托里县| 广水市| 兖州市| 阜新| 时尚| 定州市| 承德县| 若羌县| 吉林省| 沙雅县| 环江| 卢氏县| 驻马店市| 盘山县| 共和县| 兴安县| 阜新市| 普安县|