微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

打包相互依赖的 Cython 扩展

如何解决打包相互依赖的 Cython 扩展

我已经编写了 3 个 Cython 扩展,我想以一种整洁的方式将它们打包,以便我可以分发给同事在 Python 中使用,而无需他们安装 C 编译器。

目录结构为:

Error while attaching the device pv pvc-b87b49ff-2bce-495c-b17f-b45f51eab27b cannot be attached to the node xx.xx.xxx.xx. Error: PV pvc-b87b49ff-2bce-495c-b17f-b45f51eab27b is already attached to another node xx.xx.xxx.x and there are active pods [postgres-7-6p6sz] using that

其中 myproject\ |---- setup.py |---- gamma-source\ | |---- eta.pxd | |---- eta.pyx | |---- omega.pxd | |---- omega.pyx | |---- rho.pxd | |---- rho.pyx 一个来自 omega 的 cimport,rho一个 cimport 和一个来自 eta 的导入,omega一个来自 rho 的 cimports和eta

我的 omega 是:

setup.py

并使用 from setuptools import setup,Extension from Cython.Build import cythonize __version__ = '0.1.0' exts = [Extension("eta",sources = ["gamma-source\\eta.pyx"]),Extension("omega",sources = ["gamma-source\\omega.pyx"]),Extension("rho",sources = ["gamma-source\\rho.pyx"]),] setup(name="gamma",version=__version__,ext_modules = cythonize(exts,compiler_directives = {'language_level':'3'} ),zip_safe = False,) 让我在自己的机器上工作,但是:

  1. python setup.py install 文件被放到我的 .pyd 文件夹中,而不是放在 site-packages 中,这很乱。
  2. 方法要求我使用 site-packages\rho 而不是 import eta,omega,rhofrom gamma import omega,如果可能的话,我更愿意这样做。

我尝试将 setup.py 更改为:

import gamma.omega

但是 exts = [Extension("gamma.eta",Extension("gamma.omega",Extension("gamma.rho",] 给了我:

python setup.py develop

然后我尝试将 error: Could not create 'gamma\rho.cp39-win_amd64.pyd': No such file or directory. 目录放入 gamma,然后它会安装,但我发现 myproject 工作但导入 from gamma import omegaeta 给了我

rho

然后我尝试将导入从 ModuleNotFoundError: No module named 'rho' 更改为 from omega cimport omega_class,希望这能让模块找到彼此,但无法编译 - from .omega cimport omega_class 不能找到eta.pyx

我尝试将一个空白的 omega_class 文件添加__init__.py,但这也无法编译。

我哪里出错了?我应该如何将这些扩展打包成一个连贯的单元?我很高兴与大家分享我采用的任何方法的更详细的错误信息,但不确定哪种方法会卓有成效。

这个问题看起来可能遇到了同样的问题,但我不清楚我将如何应用给定的解决方案: Building Python package containing multiple Cython extensions

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。