【发布时间】:2023-11-27 09:42:01
【问题描述】:
我花了最后一个小时寻找可能的解决方案,但之前的答案似乎都没有帮助。我有两个文件,comp.pyx(编译后变成 comp.c)和 comp_exec.py。
现在 comp.pyx 看起来像这样:
cdef extern from "math.h":
double sin(double x)
double cos(double x)
double sqrt(double x)
double atan(double x)
double exp(double x)
double log(double x)
double fabs(double x)
import array
import random
cimport numpy as np
import numpy as np
cimport cython
# Some other code
cdef void fm(double a, double b, double c, double d, int e, int f, int g, int h, double i, double j, double k, str l):
#some code
def fm1 (a, b, c, d, e, f, g, h, i, j, k, l):
fm(a,b,c,d,e,f,g,h,i,j,k,l)
同时,comp_exec.py 看起来像这样(变量定义不是这里的问题):
import multiprocessing
import scipy
import math
import sys
import numpy as np
import comp
def doThis(x, g, h, l, tm, tn, ij, ji, sig):
cpu = multiprocessing.cpu_count()
pool = multiprocessing.Pool(processes=cpu)
print "Running on", cpu, "cores."
results = []
for n in range(0,Nmax):
for t in range(0,tmax):
th = math.acos(1-t*dt)
for p in range(0,Np):
phi = p*dp
filename = get_filename(n,t,p)
temp = (x,l+k*n,a[1],a[2],a[3],a[4],a[5],a[6],th,ph,s,f)
pool.apply_async(comp.fm1,args=temp,callback=logResult)
pool.close()
pool.join()
#Some code to fill array args[] with parameters from file
doThis(args[0], args[1], (etc) ..., args[8])
运行 comp_exec.py 时,它告诉我“模块”对象没有属性“fm1”。我不相信有任何循环继承,并且我已经将 fm 函数包装在 fm1 函数中,该函数应该对 comp_exec.py 可见。这里可能是什么问题?
编辑:这是 setup.py 的样子。我运行命令
python setup.py build_ext --inplace
在命令提示符下编译 Cython 文件。
setup.py:
from distutils.core import setup, Extension
from Cython.Distutils import build_ext
from Cython.Build import cythonize
setup(
ext_modules = cythonize("comp.pyx")
)
【问题讨论】:
-
你能显示你的 setup.py 吗?如何编译扩展模块?
-
@cel 我进行了编辑以包含 setup.py
标签: python python-import importerror