[英]Cython AttributeError: 'module' object has no attribute 'declare'
[英]Cython 'module' object has no attribute
在我的pyx文件中,我定義了兩個C函數,並由python函數包裝。 它已成功Rand_Motion.cpython-34m.so
並輸出了一個名為Rand_Motion.cpython-34m.so
的文件。 但是,我無法使用import Rand_Motion訪問主文件中pyx文件中定義的任何函數。 這是我的Rand_Motion.pyx
:
cdef extern from "math.h":
float cosf(float theta)
float sinf(float theta)
float acosf(float theta)
float sqrt(float x)
cdef object randmotion_c(int Dimension,float Diffcoe, float pos_x,float pos_y, float pos_z,float drift_l,float drift_a,float drift_b,float a,float b):
cdef float length=sqrt(2*Dimension*Diffcoe)
cdef float pi= 3.1415926535
cdef float e= 2.7182818284
cdef float a_d=a*2*pi
cdef float b_d=acosf(1-b*2)
pos_x+=length*sinf(b_d) *cosf(a_d)
pos_y+=length*sinf(b_d) *sinf(a_d)
pos_z+=length*cosf(b_d)
if drift_l>0:
drift_a=(drift_a/180)*pi
drift_b=(drift_b/180)*pi
pos_x+=drift_l*sinf(drift_a) *cosf(drift_b)
pos_y+=drift_l*sinf(drift_a) *sinf(drift_b)
pos_z+=drift_l*cosf(drift_a)
return pos_x,pos_y,pos_z
def randmotion(Dimension,Diffcoe, pos_x,pos_y,pos_z,drift_l,drift_a,drift_b,a,b):
return randmotion_c(Dimension,Diffcoe, pos_x,pos_y,pos_z,drift_l,drift_a,drift_b,a,b)
cdef dis_cal_c(float x,float y,float z):
return sqrt(x*x+y*y+z*z)
def dis_cal(x,y,z):
return dis_cal_c(x,y,z)
我將您的代碼復制/粘貼到aaa.pyx
文件中,然后運行:
mgc@mgc-X:~/code/test$ cythonize aaa.pyx
mgc@mgc-X:~/code/test$ gcc -shared -fPIC -fwrapv -O2 -Wall -I/usr/include/python3.4 -o aaa.so aaa.c
mgc@mgc-X:~/code/test$ python3
Python 3.4.3 (default, Mar 26 2015, 22:03:40)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from aaa import randmotion, dis_cal
>>> dis_cal(1,2,3)
3.7416573867739413
似乎工作正常( 請注意,我在與共享庫相同的目錄中運行python )。 也許您想安裝共享庫? 查看有關編譯的cython文檔或有關安裝模塊的python文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.