有关psutil的隐藏导入的任何pyinstaller详细示例?

时间:2015-07-07 06:44:07

标签: python pyinstaller 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

的例子

ENVS:

  • 操作系统:Ubuntu 14.04
  • Python:2.7.6
  • pyinstaller:2.1

4 个答案:

答案 0 :(得分:3)

嗨希望你还在寻找答案。以下是我解决它的方法:

添加名为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

答案 1 :(得分:0)

pyinstall很难配置,cx_freeze可能更好,两个支持窗口(你可以直接下载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.pyd和{{1} }})。

在Linux中,只需运行:

xxx.dll

并在$ cxfreeze example.py -s --target-dir some_path 下输出大量文件(xxx.so)。

some_path的缺陷是它不会将所有库包装到目标目录,这意味着您必须在不同的环境下测试您的构建。如果缺少任何库,只需将它们复制到目标目录。例外情况是,如果你在Centos 6下构建你的python,但是当在Centos 7下运行时,缺少libc.so.6会抛出,你应该在Centos 7和Centos 6下编译你的python。

答案 2 :(得分:0)

对我有用的内容如下:

  1. 安装python-psutil:sudo apt-get install python-psutil。如果你 先从其他人安装psutil模块 方法,例如通过源或easy_install,首先将其删除。

  2. 像您一样运行pyinstaller,不使用hidden-import选项。

答案 3 :(得分:-1)

仍然面临错误 执行: 1.python 程序,包含平台、os、shutil 和 psutil 等模块 当我直接使用 python 运行脚本时,它工作正常。

2.如果我使用 pyinstaller 构建二进制文件。二进制文件构建成功。但是如果我运行二进制文件,我会发现没有名为 psutil 的模块。我尝试了几种方法,比如添加隐藏的导入和其他东西。没有一个在工作。我尝试了将近 2 到 3 天。 错误: ModuleNotFoundError: 没有名为“psutil”的模块 用于创建二进制文件的命令 pyinstaller --hidden-import=['_psutil_linux'] --onefile --clean serverHW.py

我试过 --additional-hooks-dir= 也不起作用。当我运行二进制文件时,我发现模块未找到错误。