Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Cython中的ImportError

Cython中的ImportError
EN

Stack Overflow用户
提问于 2018-01-22 17:39:52
回答 2查看 1.3K关注 0票数 0

我是cython的新手,所以我有一个基本的问题。我正在尝试将一个基类从一个cython文件导入到另一个cython文件中,以定义派生类。我在一个名为cythonTest/的目录中有以下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
afile.pxd
afile.pyx
bfile.pxd
bfile.pyx
__init__.py
setup.py

afile.pxd:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cdef class A:
    pass

afile.pyx:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cdef class A:
    def __init__(self):
        print("A__init__()")

bfile.pxd:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from afile cimport A

cdef class B(A):
    pass

bfile.pyx:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cdef class B(A):
    def __init__(self):
        print "B.__init__()"

setup.py:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize

extensions = [Extension("afile", ["afile.pyx"]), 
              Extension("bfile", ["bfile.pyx"])]

setup(ext_modules=cythonize(extensions))

这段代码似乎可以正确编译。运行import afile可以正常工作,但运行import bfile会导致以下错误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "bfile.pyx", line 1, in init cythonTest.bfile
    cdef class B(A):
ImportError: No module named cythonTest.afile

有人知道我做错了什么吗?我使用的是Python 2.7.6和Cython 0.27.3

EN

回答 2

Stack Overflow用户

发布于 2018-01-23 12:43:22

您似乎正在使用cythonTest作为包名称(包含用作包的__init__.py的目录)。

模块名称需要反映在扩展名中才能正常导入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
extensions = [Extension("cythonTest.afile", ["cythonTest/afile.pyx"]), 
              Extension("cythonTest.bfile", ["cythonTest/bfile.pyx"])]

可能还需要移动包目录下的pyx文件- Cython在构建扩展时使用包名。

票数 0
EN

Stack Overflow用户

发布于 2018-01-23 16:19:57

一种解决方案是使用显式导入。缺点:你必须安装这个包才能正常工作。

我有以下结构:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.
├── cythonTest
│   ├── afile.pxd
│   ├── afile.pyx
│   ├── bfile.pxd
│   ├── bfile.pyx
│   └── __init__.py
└── setup.py

文件:

cythonTest/afile.pxd

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cdef class A:
    pass

cythonTest/afile.pyx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cdef class A:
    def __init__(self):
        print("A__init__()")

cythonTest/bfile.pxd

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cimport cythonTest.afile

cdef class B(cythonTest.afile.A):
    pass

cythonTest/bfile.pyx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cimport cythonTest.afile

cdef class B(cythonTest.afile.A):
    def __init__(self):
        print "B.__init__()"

init文件为空,仅用于将目录定义为模块。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize

extensions = [Extension("cythonTest.afile", ["cythonTest/afile.pyx"]), 
              Extension("cythonTest.bfile", ["cythonTest/bfile.pyx"])]

setup(
    packages=['cythonTest'],
    ext_modules=cythonize(extensions),
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48387310

复制
相关文章
Python中的cython介绍
Cython是一种用于将Python代码转换为C或C++代码的编译器。它是Python和C/C++之间的一种桥梁,可以提供更高的执行效率和更好的性能。Cython既是一种编程语言,也是一种编译器,它可以将Python代码转换为C或C++代码,并在编译时将其转换为机器码,以提高代码的执行速度。
大盘鸡拌面
2023/10/12
6920
Python中ImportError:
Python脚本在编译的时候,经常会遇到ImportError: No module named *** 的错误 错误提示: ImportError: No module named request 问题分析: 原因是Python中有些模块未导入。 解决方法: 检查 from *** import *** 中模块名称是否有错误,如果没有错,就通过命令行 pip install *** 下载该模块,如果安装不成功,可以到http://www.lfd.uci.edu/~gohlke/pythonlibs/ 搜索下载。
py3study
2020/01/13
1.3K0
Cython初识
python作为一门强大的脚本语言,优势自然不必说。但是,当我们的模型较复杂,运算量较大的时候,python的短板就会出现,就是运算速度慢。当然,解决这一问题有很多方法,比如pypy的jit技术,但是抛开稳定性不提,使用pypy有很多限制,而且不是那么工程化。所以,向大家介绍Cython,方便将别的应用场景中的一些重计算的部分单独取出来,然后用Cython改写,独立成模块来提高运算速度。
种花家的奋斗兔
2020/11/13
8770
Cython入门
setup这一年也是遇到了很多次,随着python编程学习的不断深度对于python的了解也不断在增加,这里做一次简单的小节。
狼啸风云
2019/11/03
2.1K0
cython编译错误
running build_extskipping ‘bbox.c’ Cython extension (up-to-date)skipping ‘nms.c’ Cython extension (up-to-date)building ‘cython_bbox’ extension{‘gcc’: [’-Wno-cpp’, ‘-Wno-unused-function’]}gcc -pthread -B /home/gsadhasivam/anaconda3/envs/r3det/compiler_compa
狼啸风云
2021/01/05
1.5K0
Python 的 ImportError 错误
问题 错误:ImportError: No module named XXX 在Python的工程中,偶尔会遇到文件无法引用的情况,即PyCharm IDE支持文件跳转,但是当文件执行时,找不到模块。
小小科
2018/05/03
1.1K0
Python 的 ImportError 错误
python ImportError:
 >>> import paramiko Traceback (most recent call last): File "<stdin>", line 1, in <module> python ImportError: No module named paramiko 模块没有安装 接下来安装 root@scpman:~# apt-cache search python* |grep paramiko python-paramiko - Make ssh v2 connections with Python apt-get install python-paramiko root@scpman:~# python Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) [GCC 4.4.5] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import paramiko /usr/lib/python2.6/dist-packages/Crypto/Util/randpool.py:40: RandomPool_DeprecationWarning: This application uses RandomPool, which is BROKEN in older releases. See http://www.pycrypto.org/randpool-broken RandomPool_DeprecationWarning) >>> import paramiko >>> >>> print "www.scpman.com" www.scpman.com >>> 现在好用了
py3study
2020/01/06
5430
用Cython加速Python代码
要在我们的笔记本中使用Cython,我们将使用IPython magic命令。Magic命令以百分号开始,并提供一些额外的功能,这些功能可以增强工作流。通常,有两种类型的Magic命令:
hankleo
2020/09/17
6250
ImportError: No modu
报错:ImportError: No module named bs4 我的Python版本 python --version python 2.7.5 按照网上方法尝试安装BeautifulSoup无果,BeautifulSoup据说能在python2的版本很好兼容,在python3版本兼容不是太好。 yum install BeautifulSoup     (不可行) yum install bs4               (不可行) 正确解决方法 yum install python-beautifulsoup 启发 rpm -qa|grep python可以看到python许多兼容库 安装的版本是 python-BeautifulSoup-3.2.1-7.el7.noarch 使用from bs4 import BeautifulSoup任然报错 使用import BeautifulSoup不报错
py3study
2020/01/08
3690
ImportError: No mod
  File "/usr/local/lib/python2.7/sqlite3/__init__.py", line 24, in <module>
py3study
2020/01/08
6300
Cython入门到放弃(二)
上一篇文章讲了Cython的使用流程,没有具体展开讲别的,例子也很简单。今天首先使用一个官方文档上使用Cython的例子,然后抛出几个连续的小demo,看看Cython是如何一步一步加速的。
钱塘小甲子
2019/01/28
8300
Cython入门到放弃(一)
        python作为一门强大的脚本语言,优势自然不必说,目前中低频的量化投资基本都是使用python作为research和production作为语言。但是,当我们的模型较复杂,运算量较大的时候,python的短板就会出现,就是运算速度慢。
钱塘小甲子
2019/01/28
3K0
python错误 ImportError
python错误:ImportError: No module named setuptools
py3study
2020/01/09
7480
使用Cython加速你的Python代码
如果您曾经用Python编写过代码,那么您可能花费了比您希望的更多的时间等待某些代码块的执行。虽然有一些方法可以提高代码的效率,但是它很可能仍然比C代码慢。这主要归结为Python是一种动态编程语言,并将许多C在编译期间负责的事情转移到运行。
HuangWeiAI
2020/07/27
9770
使用Cython加速你的Python代码
用Cython加密打包python项目
将下述代码保存为setup.py至需打包项目根目录,安装cython后执行python setup.py即可打包。
Ewdager
2020/07/14
4.7K0
PyDev:warning: Debugger speedups using cython not found
该文讲述了在PyDev中调试Python代码时,出现警告没有找到使用Cython加速的调试器。文中提供了在PyDev安装目录下执行编译cython加速模块的命令,以解决此问题。
10km
2018/01/03
2.3K0
PyDev:warning: Debugger speedups using cython not found
使用Cython保护Python源代码
使用Cython保护Python源代码 **保护您的Python源不受不必要的影响,说起来容易做起来难,因为.pyc字节码是可反编译的,并且混淆很容易被反向工程。我花了一段时间才弄清楚隐藏Python代码的正确方法...... Cython是一个优化的静态编译器,可以将.py模块转换为高性能的C文件,生成的C文件可以毫不费力地编译到本机二进制库中。编译完成后,无法将编译库转换回可读的Python源代码! 1. 安装 Cython pip install cython 2. 添加 hello.pyx 假
py3study
2020/01/13
2.3K0
关于 python ImportError: No module named 的问题
今天在 centos 下安装 python setup.py install 时报错:ImportError: No module named sysconfig, 当时急着用,就顺手直接源码编译了一把,make install 后就 ok 了。 然后又在 cygwin 下安装时同样的问题,这下 cygwin 源码编译也不行了,因为会调用很多 linux 特有的类库。 虽然最后解决了 import 的问题,但是又报了其它错。比如 ldconfig 啥的,可能是我cygwin环境没装全。 只有
用户1177713
2018/02/24
2.9K0
关于 python ImportError: No module named 的问题
ImportError: No module named 'ConfigParser'
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
云雀叫了一整天
2019/09/29
2.3K0
点击加载更多

相似问题

Cython ImportError

16

ImportError:没有名为“Cython”的模块

76

ImportError: Cython和gcc-5

12

带有cython的外部库,生成ImportError

10

ImportError导入.pyd - DLL加载失败。Cython

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文