繁体   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