我想使用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:
答案 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)
对我有用的内容如下:
安装python-psutil:sudo apt-get install python-psutil
。如果你
先从其他人安装psutil
模块
方法,例如通过源或easy_install
,首先将其删除。
像您一样运行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= 也不起作用。当我运行二进制文件时,我发现模块未找到错误。