Pycharm无法识别位于路径中的Cython模块

时间:2016-10-23 13:31:14

标签: python pycharm cython

我有这两行代码:

from libc.stdlib cimport malloc, calloc, realloc, free

from optv.tracking_framebuf cimport TargetArray

第一个未被PyCharm(2016.2.3专业人士在Ubuntu 14.04上)突出显示为未解决的参考,但第二行以红色突出显示为未解析的参考。

我的TargetArray课程位于tracking_framebuf.pxd文件中,该文件位于/usr/local/lib/python2.7/dist-packages/optv/以及同名的.c,.pyx,.so文件中。

我插入了/usr/local/lib/python2.7/dist-packages/optv//usr/local/lib/python2.7/dist-packages/路径以与python解释器关联,但错误消息仍在编辑器中。

尽管有错误消息,但使用此setup.py脚本成功进行了cython化:

# -*- coding: utf-8 -*-
from distutils.core import setup
from Cython.Distutils import build_ext
from Cython.Distutils.extension import Extension

import numpy as np
import os
inc_dirs = [np.get_include(), '.']

def mk_ext(name, files):
    return Extension(name, files, libraries=['optv'], include_dirs=inc_dirs,
        pyrex_include_dirs=['.'])

ext_mods = [
    mk_ext("optv.tracking_framebuf", ["optv/tracking_framebuf.pyx"]),
    mk_ext("optv.parameters", ["optv/parameters.pyx"]),
    mk_ext("optv.calibration", ["optv/calibration.pyx"]),
    mk_ext("optv.transforms", ["optv/transforms.pyx"]),
    mk_ext("optv.imgcoord", ["optv/imgcoord.pyx"]),
    mk_ext("optv.image_processing", ["optv/image_processing.pyx"]),
    mk_ext("optv.segmentation", ["optv/segmentation.pyx"]),
    mk_ext("optv.orientation", ["optv/orientation.pyx"])
]

setup(
    name="optv",
    cmdclass = {'build_ext': build_ext},
    packages=['optv'],
    ext_modules = ext_mods,
    package_data = {'optv': ['*.pxd']}
)

我是否遗漏了一些东西以摆脱这些错误消息并能够查看我放在路径中的.pxd文件的内容?

2 个答案:

答案 0 :(得分:5)

通过以下方式将0.7.x添加到PYTHONPATH来解决问题:

档案 - >设置 - >项目 - >项目结构 - >添加内容根。

答案 1 :(得分:2)

默认情况下,PyCharm会忽略Cython导入,除非它们是搜索路径的一部分。如果模块文件夹是白色的,这是一支冒烟的枪:

enter image description here

如果文件夹为白色,请将其添加到搜索路径:

enter image description here

更新2017-09-18

出于某种原因,有时候PyCharm实际上并没有添加标记为" Sources Root"到Python路径。通过打开它来修复此问题。

注意"起始脚本"在下图中。我假设手动将这些行添加到Python脚本中也会得到相同的结果。

enter image description here