我正在尝试构建scipy,我得到一个RuntimeError:
$sudo python setup.py build
Processing scipy/cluster/_vq_rewrite.pyx
Traceback (most recent call last):
File "tools/cythonize.py", line 172, in <module>
main()
File "tools/cythonize.py", line 168, in main
find_process_files(root_dir)
File "tools/cythonize.py", line 160, in find_process_files
process(cur_dir, fromfile, tofile, function, hash_db)
File "tools/cythonize.py", line 137, in process
processor_function(fromfile, tofile)
File "tools/cythonize.py", line 66, in process_pyx
raise OSError('Cython needs to be installed')
OSError: Cython needs to be installed
Traceback (most recent call last):
File "setup.py", line 209, in <module>
setup_package()
File "setup.py", line 202, in …Run Code Online (Sandbox Code Playgroud) 刚开始学习cython.我试图编译一个简单的.pyx文件.
print("hello")
Run Code Online (Sandbox Code Playgroud)
这是我的setup.py:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("hello.pyx")
)
Run Code Online (Sandbox Code Playgroud)
然后我运行命令.
python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)
错误如下.我一直在谷歌搜索它,没有任何帮助来找我.
running build_ext
building 'hello' extension
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD
-IC:\Users\Jackie\AppData\Local\Continuum\Anaconda3\include -IC:\Users\Jackie\AppData\Local\Continuum\Anaconda3\include "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE"
"-IC:\Program Files (x86)\Windows Kits\10\include\wdf\ucrt"
"-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um"
"-IC:\Program Files (x86)\Windows Kits\8.1\include\shared"
"-IC:\Program Files (x86)\Windows Kits\8.1\include\um" "-IC:\Program
Files (x86)\Windows Kits\8.1\include\winrt" /Tchello.c
/Fobuild\temp.win32-3.5\Release\hello.obj
hello.c
c:\users\jackie\appdata\local\continuum\anaconda3\include\pyconfig.h(68):
fatal error C1083: Cannot open include file: 'io.h': …Run Code Online (Sandbox Code Playgroud) 我试图在cython中创建一个函数,通过定义一个cython结构类型接受一个numpy结构化数组或记录数组.假设我有数据:
a = np.recarray(3, dtype=[('a', np.float32), ('b', np.int32), ('c', '|S5'), ('d', '|S3')])
a[0] = (1.1, 1, 'this\0', 'to\0')
a[1] = (2.1, 2, 'that\0', 'ta\0')
a[2] = (3.1, 3, 'dogs\0', 'ot\0')
Run Code Online (Sandbox Code Playgroud)
(注意:无论是否使用null终止符,都会出现下面描述的问题)
然后我有cython代码:
import numpy as np
cimport numpy as np
cdef packed struct tstruct:
np.float32_t a
np.int32_t b
char[5] c
char[3] d
def test_struct(tstruct[:] x):
cdef:
int k
tstruct y
for k in xrange(3):
y = x[k]
print y.a, y.b, y.c, y.d
Run Code Online (Sandbox Code Playgroud)
当我尝试运行时test_struct(a),我收到错误:
ValueError: Expected a dimension of …Run Code Online (Sandbox Code Playgroud) 我int对cython中的这么多数据类型感到有点挣扎.
np.int, np.int_, np.int_t, int
我猜int在纯python中相当于np.int_,那么它np.int来自哪里呢?我从numpy找不到文件?另外,np.int_鉴于我们已经存在,为什么存在int?
在cython中,我猜想int当它被用作cdef int或者成为C型时ndarray[int],并且当int()它被用作python施法者时它会被使用?
是np.int_相当于long用C?那cdef long是相同的cdef np.int_吗?
我应该在什么情况下使用np.int_t而不是np.int?例如cdef np.int_t,ndarray[np.int_t]......
有人可以简单解释这些类型的错误使用会如何影响已编译的cython代码的性能?
我有一些代码可以执行一些非常耗费CPU的字符串操作,我一直在寻找提高性能的方法.
(编辑:我正在做的事情就像找到最常见的子串,运行大量正则表达式,可能更好地表达为c中的状态机,从HTML中剥离注释,这样的东西.)
我目前正在考虑将一些代码移植到Cython之后听到很多关于它的好东西.然而,似乎Cython的主要焦点是数值计算,并且使用字符串几乎没有记录.
Unicode也可能是一个大问题.
我的问题是:
从命令行运行时
$ cython -a mycode.pyx
Run Code Online (Sandbox Code Playgroud)
你得到一个非常好的HTML"注释"文件,带有黄色阴影,表示慢速python操作与快速C操作.每次在Sage中编译Cython代码时,您也会获得相同的HTML文件作为链接.我的问题是:(1)如果我正在编译使用distutils,我可以得到这个HTML文件吗?(2)如果我使用pyximport进行编译,是否可以获取此HTML文件?谢谢!!
在Cython文档的教程中,有numpy模块的cimport和import语句:
import numpy as np
cimport numpy as np
Run Code Online (Sandbox Code Playgroud)
我发现这个约定在numpy/cython用户中很受欢迎.
这看起来很奇怪的我,因为他们都命名为NP.在哪部分代码中,使用了导入/ cimported np?为什么cython编译器不会混淆它们?
是否可以使用__init__.pyx(编译__init__.so)创建Python 2.7包?如果是这样的话?我没有运气好运.
这是我尝试过的:
setup.py:
#!/usr/bin/env python
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
foo = Extension(name='foo.__init__', sources=['foo/__init__.pyx'])
bar = Extension(name='foo.bar', sources=['foo/bar.pyx'])
setup(name='foo',
packages = ['foo'],
cmdclass={'build_ext':build_ext},
ext_modules = [foo, bar])
Run Code Online (Sandbox Code Playgroud)foo/__init__.pyx:
import foo.bar
cpdef hello_world():
print "hello world"
foo.bar.blah()
Run Code Online (Sandbox Code Playgroud)foo/bar.pyx:
cpdef blah():
print "blah"
Run Code Online (Sandbox Code Playgroud)以上具有以下行为:
$ python -c 'import foo; foo.hello_world()'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named foo
Run Code Online (Sandbox Code Playgroud)
我看到 …