打包相互依赖的 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 (将#修改为@)