python – cython:不允许在主包之外的相对cimport

python – cython:不允许在主包之外的相对cimport,第1张

概述我试图在cython中使用显式相对导入.从 release notes开始,似乎相对导入应该在cython 0.23之后工作,而我使用的是0.23.4和python 3.5.但我得到了这个奇怪的错误,我找不到很多引用.错误仅来自cimport: driver.pyx:4:0: relative cimport beyond main package is not allowed 目录结构是: my 我试图在cython中使用显式相对导入.从 release notes开始,似乎相对导入应该在cython 0.23之后工作,而我使用的是0.23.4和python 3.5.但我得到了这个奇怪的错误,我找不到很多引用.错误仅来自cimport:

driver.pyx:4:0: relative cimport beyond main package is not allowed

目录结构是:

myProject/    setup.py    __init__.py    test/        driver.pyx        other.pyx        other.pxd

好像我可能搞乱了setup.py所以我包含了下面的所有文件.

Setup.py

from setuptools import setupfrom distutils.extension import Extensionfrom Cython.distutils import build_extext_modules = [    Extension('other',['test/other.pyx'],),Extension('driver',['test/driver.pyx'],]setup(    name='Test',ext_modules=ext_modules,include_dirs=["test/"],cmdclass={'build_ext': build_ext},)

driver.pyx

#!/usr/bin/env pythonfrom . import otherfrom . cimport other

other.pyx

#!/usr/bin/env pythonHI = "Hello"cdef class Other:    def __init__(self):        self.name = "Test"    cdef get_name(self):        return self.name

other.pxd

cdef class Other:    cdef get_name(self)

我已经尝试将__init__.py移动到测试中.我已经尝试在测试目录中运行setup.py(适当调整include_dirs).他们都给出了同样的错误.如果我做cimport其他并删除.它可以工作,但这是一个玩具示例,我需要相对导入,以便其他文件夹可以正确导入.这是我能找到的唯一一个这个错误的example,我非常有信心我的问题不同了.

解决方法 我能找到这个错误的唯一其他 example是0700的 hal.pyx.我非常有信心这是一个不同的错误,但今天我意识到在错误解决后,机器工具正在工作,这意味着显式相对导入必须工作.他们的setup.py文件是指linuxcnc,它不在目录树中,但我想是在编译期间的某个时刻创建的.重要的是include_dirs包括父目录而不是子目录.

转换为我的项目结构,这意味着我将myProject放在include_dirs而不是test /.在第guide次读完之后,我终于开始了解python如何看待包.问题是include_dirs是子目录.看起来这有效地使cython将其视为单个平面目录,在这种情况下不允许相对导入?像这样的错误可能会使它更清晰:

ValueError: Attempted relative import in non-package

我仍然没有足够深刻的理解来确切知道发生了什么,但幸运的是,解决方案相对简单.我刚刚更改了include_dirs以使cython识别嵌套文件结构:

from setuptools import setupfrom distutils.extension import Extensionfrom Cython.distutils import build_extext_modules = [    Extension('other',include_dirs=["."],)

现在一切正常!

总结

以上是内存溢出为你收集整理的python – cython:不允许在主包之外的相对cimport全部内容,希望文章能够帮你解决python – cython:不允许在主包之外的相对cimport所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197440.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存