Python 将带有C扩展名的Setuptools用作软件包的一部分

Python 将带有C扩展名的Setuptools用作软件包的一部分,python,c,setuptools,packaging,python-extensions,Python,C,Setuptools,Packaging,Python Extensions,我编写了一个C扩展来访问来自专有库的相机的错误消息。结构是 setup.py dicamsdk\ |---__init__.py |---control.py |---pcoError.c 使用setup.py from setuptools import setup, Extension, find_packages from dicamsdk.control import __version__ pcoErrorModule = Extension("dicamsdk.pcoError"

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

setup.py
dicamsdk\
|---__init__.py
|---control.py
|---pcoError.c
使用
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__
)
control.py
打算导入已编译的C扩展名

from . import pcoError
当我尝试构建(或安装)软件包时,我总是收到错误
ImportError:无法导入名称“pcoError”

唯一可行的方法是在
control.py
中注释掉导入,并使用
setup.py build\u ext--inplace
构建C扩展。只需使用编译后的present,我就可以构建/安装我的库


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

问题是在
setup.py
的开头导入。第2行中的导入(
来自dicamsdk.control import uuuuu version uuuu
)强制对模块进行代码检查


删除后,软件包的安装或生成将正常运行。

根据您自己的答案,提供更合适的解决方案:


您的版本可能适用于整个项目,而不仅仅是控制模块。在
\uuu init\uuuu.py
中定义
版本是标准的。在这种情况下,您在
setup.py
中的导入看起来像来自dicamsdk import的
。这不会导致冲突,除非您做了一些愚蠢的事情,比如从包根目录自动导入所有模块。

S.O.很好。其他人和你有同样问题的几率有多大?