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

coa*_*nor 7 python pyinstaller psutil

我想通过使用将我的 python 代码编译为二进制文件pyinstaller,但是hidden import阻止了我。例如,以下代码导入psutil并打印 CPU 计数:

# example.py
import psutil
print psutil.cpu_count()
Run Code Online (Sandbox Code Playgroud)

我编译代码:

$ pyinstaller -F example.py --hidden-import=psutil
Run Code Online (Sandbox Code Playgroud)

当我在以下运行输出时dist

ImportError: cannot import name _psutil_linux
Run Code Online (Sandbox Code Playgroud)

然后我尝试:

$ pyinstaller -F example.py --hidden-import=_psutil_linux
Run Code Online (Sandbox Code Playgroud)

还是一样的错误。我已经阅读了 pyinstall 手册,但我仍然不知道如何使用hidden import. 有详细的例子吗?或者至少是一个编译和运行我的example.py?

ENV:

  • 操作系统:Ubuntu 14.04
  • 蟒蛇:2.7.6
  • py安装程序:2.1

nem*_*emo 6

您好,希望您仍在寻找答案。这是我解决它的方法:

添加一个名为 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')
Run Code Online (Sandbox Code Playgroud)

然后打电话 pyinstaller --additional-hooks-dir=(the dir contain the above script) script.py


coa*_*nor 0

pyinstall很难配置,cx_freeze也许更好,都支持windows(可以exe直接下载)和linux。提供example.py,在 Windows 中,假设您已在默认路径 ( C:\\Python27) 中安装了 python:

$ python c:\\Python27\\Scripts\\cxfreeze example.py -s --target-dir some_path
Run Code Online (Sandbox Code Playgroud)

cxfreeze是一个Python脚本,你应该用 运行它python,然后构建文件在下面some_path(有很多xxx.pydxxx.dll)。

在 Linux 中,只需运行:

$ cxfreeze example.py -s --target-dir some_path
Run Code Online (Sandbox Code Playgroud)

并且还输出了很多文件( xxx.so) 下的some_path

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