如何解决打包相互依赖的 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,)
让我在自己的机器上工作,但是:
-
python setup.py install
文件被放到我的.pyd
文件夹中,而不是放在site-packages
中,这很乱。 - 此方法要求我使用
site-packages\rho
而不是import eta,omega,rho
或from 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 omega
和 eta
给了我
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 举报,一经查实,本站将立刻删除。