[英]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.