问题描述
使用 pyinstaller 和 opencl 将 python 脚本转换为二进制文件的正确方法是什么?如何设置 name.spec 文件?在下面查看我的 pyinstaller 设置
用法:pyinstaller --clean --noconfirm --log-level=DEBUG --onefile --paths=/home/testuser/projects/tool --paths=/usr/local/lib/python3.8/dist -packages/pyopencl-2018.2.2-py3.8-linux-x86_64.egg --hidden-import=pyopencl --name=toolexe tool.py
解决方法
从我的主脚本(myscript.py)中,我调用“import tool as *”,这是我的工具包,它在几个工具包脚本中调用“import pyopencl as cl”。当我在脚本上运行编译后的二进制版本时,我看到“pyopencl.init.py”被多次调用..(见下图) 我想知道是否是“工具作为 *”的相对导入,从而搞砸了二进制版本。注意:此代码确实可以用作 python 脚本代码。
#myscript -- "导入工具为 *"
└── 工具
├── common.py ... #"import pyopencl as cl"
├── engine.py ... #"import pyopencl as cl"
├── traffic.py... #"import pyopencl as cl"
├── init.py
我在将 python 脚本转换为二进制文件时发现了两个问题
-
python 脚本导入工具/tool.py 错误,导入脚本不能与所在目录同名。
-
在 linux 中,当转换为二进制时,线程会出现警告.. https://docs.python.org/3/library/multiprocessing.html
警告 'spawn' 和 'forkserver' 启动方法目前不能用于 Unix 上的“冻结”可执行文件(即由 PyInstaller 和 cx_Freeze 等包生成的二进制文件)。 'fork' 启动方法确实有效