gpt4 book ai didi

python - 将 Setuptools 与 C 扩展一起用作包的一部分

转载 作者:太空狗 更新时间:2023-10-29 15:37:34 25 4
gpt4 key购买 nike

我编写了一个 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: cannot import name 'pcoError'

它似乎唯一可行的方法是注释掉 control.py 中的导入并使用 setup.py build_ext --inplace 构建 C 扩展。只需使用已编译的 present,我就可以构建/安装我的库。

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

最佳答案

根据你自己的回答更合适的解决方案:

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

关于python - 将 Setuptools 与 C 扩展一起用作包的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47511947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com