簡體   English   中英

任何關於 psutil 隱藏導入的 pyinstaller 詳細示例?

[英]Any pyinstaller detailed example about hidden import for psutil?

我想使用pyinstaller將我的 python 代碼編譯為二進制文件,但hidden import阻止了我。 例如,以下代碼導入psutil並打印 CPU 計數:

# example.py
import psutil
print psutil.cpu_count()

我編譯代碼:

$ pyinstaller -F example.py --hidden-import=psutil

當我在dist下運行輸出時:

ImportError: cannot import name _psutil_linux

然后我嘗試:

$ pyinstaller -F example.py --hidden-import=_psutil_linux

還是一樣的錯誤。 我已經閱讀了 pyinstall 手冊,但我仍然不知道如何使用hidden import 有詳細的例子嗎? 或者至少是一個編譯和運行我的example.py的例子?

ENV:

  • 操作系統:Ubuntu 14.04
  • 蟒蛇:2.7.6
  • py安裝程序:2.1

您好,希望您仍在尋找答案。 這是我解決它的方法:

添加一個名為hook-psutil.py的文件

from PyInstaller.hooks.hookutils import (collect_data_files, collect_submodules)

datas = [('./venv/lib/python2.7/site-packages/psutil/_psutil_linux.so', 'psutil'),
         ('./venv/lib/python2.7/site-packages/psutil/_psutil_posix.so', 'psutil')]
hiddenimports = collect_submodules('psutil')

然后調用pyinstaller --additional-hooks-dir=(the dir contain the above script) script.py

pyinstall很難配置, cx_freeze可能更好,都支持windows(可以直接下載exe )和linux。 提供example.py ,在 windows 中,假設您已經在默認路徑 ( C:\\\\Python27 ) 中安裝了 python:

$ python c:\\Python27\\Scripts\\cxfreeze example.py -s --target-dir some_path

cxfreeze是一個 python 腳本,你應該用python運行它,然后構建文件在some_path下(有很多xxx.pydxxx.dll )。

在 Linux 中,只需運行:

$ cxfreeze example.py -s --target-dir some_path

並在some_path下輸出很多文件( xxx.so )。

cx_freeze的缺陷是它不會將所有庫都包裝到目標目錄,這意味着您必須在不同的環境下測試您的構建。 如果缺少任何庫,只需將它們復制到目標目錄。 一個例外的情況是,例如,如果您在 Centos 6 下構建您的 python,但在 Centos 7 下運行時,會拋出 libc.so.6 丟失,您應該在 Centos 7 和 Centos 6 下編譯您的 python。

對我有用的是:

  1. 安裝 python-psutil: sudo apt-get install python-psutil 如果您以前通過其他方法安裝了psutil模塊,例如通過 source 或easy_install ,請先將其刪除。

  2. 像你一樣運行pyinstaller ,沒有hidden-import選項。

仍然面臨錯誤 Implementation: 1.python program with modules like platform , os ,shutil 和 psutil 當我直接使用 python 運行腳本時,它工作正常。

2.如果我使用pyinstaller構建二進制文件。 二進制文件構建成功。 但是如果我運行二進制文件,我會發現沒有名為 psutil 的模塊。我嘗試了幾種方法,比如添加隱藏的導入和其他東西。 沒有一個在工作。 我嘗試了將近 2 到 3 天。 錯誤: ModuleNotFoundError: No module named 'psutil'命令用於創建二進制pyinstaller --hidden-import=['_psutil_linux'] --onefile --clean serverHW.py

我試過 --additional-hooks-dir= 也不起作用。 當我運行二進制文件時,我正在獲取模塊未找到錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM