[英]Including compiled extension with cx_freeze
我有一个使用scikit-build 构建的 C 扩展(因为它使用 CMake 库),并且在 python 中导入时它构建良好并且工作正常。
然后,我尝试构建使用cx-freeze扩展的脚本,该扩展正在构建,但我看到“缺少模块”下列出了扩展:
Missing modules:
? _atscManufacturing imported from atsc.atscManufacturing.atscManufacturing
当我从命令提示符运行构建的可执行文件时,它会挂起几秒钟,然后退出而没有输出。
我见过这个解决方案,它建议使用Extension
添加 C 扩展,但这似乎是要编译库而不是只包含编译的库。 我认为这行不通,因为它需要构建 CMake 库。
这是我的主要setup.py
:
from cx_Freeze import setup, Executable
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {"packages": ["os", "atsc.atscManufacturing.atscManufacturing", "intelhex", "logging", "atexit", "sys"], "excludes": []}
base = None
setup( name = "Manufacturing script",
version = "1.0.0",
description = "manufacturing script",
options = {"build_exe": build_exe_options},
executables = [Executable("main.py", base = base)])
这是./atsc
扩展名的setup.py
:
from skbuild import setup
setup(
name="atscManufacturing",
version="0.1",
packages=['atscManufacturing']
)
我能够让它工作,有几个问题:
python setup.py build
来构建 atscManufacturing 模块。 这将在构建目录中构建库。 我添加了--inplace
选项来输出模块中的库。dumpbin /dependents _atscManufacturing.cp310-win_amd64.pyd
来解决这个问题,其中列出了有问题的共享库__init__.py
加载了模块,所以我只是删除了该文件并更改了主 python 文件中的导入。 没有错误使得调试变得困难,我求助于添加print
调用来查看脚本失败的地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.