使用带有 C 扩展的安装工具作为包的一部分

smi*_*y84 5 c python packaging setuptools python-extensions

我编写了一个 C 扩展来从专有库访问相机的错误消息。结构是

setup.py
dicamsdk\
|---__init__.py
|---control.py
|---pcoError.c
Run Code Online (Sandbox Code Playgroud)

setup.py

from setuptools import setup, Extension, find_packages
from dicamsdk.control import __version__

pcoErrorModule = Extension("dicamsdk.pcoError",
                           sources=["dicamsdk/pcoError.c"],
                           include_dirs=['C:\Program Files (x86)'
                                         '\Digital Camera Toolbox'
                                         '\Sensicam SDK\include'],
                           define_macros=[("PCO_ERRT_H_CREATE_OBJECT", None)],
                           )
setup(
    name="pydicamsdk",
    platforms=["win-amd64", 'win32'],
    license="GNU GPLv3",
    ext_modules=[pcoErrorModule],
    packages=find_packages(),
    version=__version__
)
Run Code Online (Sandbox Code Playgroud)

control.py打算导入已编译的 C 扩展

from . import pcoError
Run Code Online (Sandbox Code Playgroud)

当我尝试构建(或安装)软件包时,我总是收到错误ImportError: cannot import name 'pcoError'

它似乎唯一有效的方法是注释掉导入control.py并使用setup.py build_ext --inplace. 只需使用编译后的内容,我就可以构建/安装我的库。

我是否有一个解决方案可以setup.py首先编译我的扩展以实现简单的安装?

smi*_*y84 2

问题出在 . 开头的导入上setup.py。第 2 行 ( ) 中的导入from dicamsdk.control import __version__强制对模块进行代码检查。

删除后,软件包的安装或构建可以正确运行。