在PyCharm中使用Cython-如何运行编译文件

时间:2018-07-06 08:10:18

标签: python python-3.x pycharm cython

我正试图找出如何与Cython合作并面临一些问题。 我正在使用python 3.6和PyCharm Professional作为IDE。当前环境是OSX。

首先,我尝试创建一个包含两个文件的简单应用程序: common.pyx:

findByStatusCodeNotIgnoreCase(String statusCode)

和我要在PyCharm中运行的主文件。 据我了解,有必要将common.pyx编译为“ .so”文件。为此,我创建具有以下内容的setup.py文件:

cpdef cppfun(t):
    s = 0
    for i in range(t):
        for j in range(t):
            s = s + i*j
    return s

def pyfun(t):
    s = 0
    for i in range(t):
        for j in range(t):
            s = s + i*j
    return s

并在终端中运行以下命令:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = [
    Extension("cmn", ["common.pyx"],
              libraries=["m"], extra_compile_args=["-ffast-math"])
]

setup(
  name="cmn",
  cmdclass={"build_ext": build_ext},
  ext_modules=ext_modules
)

因此,我正在尝试将编译的文件导入到Runner.py:

python setup.py build_ext --inplace

但是出现错误:

  

文件“ /path-to-env/lib/python3.6/ctypes/init.py”,行366,位于    getitem       func = self._FuncPtr(((name_or_ordinal,self))AttributeError:dlsym(0x7fb77cd02120,pyfun):找不到符号

最终,我不知道如何使它工作。 我有一个必须使用的想法:

import time
from ctypes import cdll
cmn = cdll.LoadLibrary('../cmn.cpython-36m-darwin.so')

if __name__ == '__main__':
    count = 100000
    start_time = time.time()
    cmn.pyfun(count)
    print("--- %s seconds ---" % (time.time() - start_time))

    start_time = time.time()
    cmn.cppfun(count)
    print("--- %s seconds ---" % (time.time() - start_time))

并避免通过终端进行手动编译,但是在这种情况下,我得到以下错误:

  

ModuleNotFoundError:没有名为“通用”的模块

0 个答案:

没有答案