Python 将带有C扩展名的Setuptools用作软件包的一部分
我编写了一个C扩展来访问来自专有库的相机的错误消息。结构是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"
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.很好。其他人和你有同样问题的几率有多大?