首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Cython尝试编译两次,但都失败了

Cython尝试编译两次,但都失败了
EN

Stack Overflow用户
提问于 2018-05-21 19:36:50
回答 1查看 414关注 0票数 11

我有一个与此处所示非常相似的setup.py文件:https://stackoverflow.com/a/49866324/4080129。它看起来是这样的:

from distutils.core import setup, Extension
from Cython.Build import cythonize
import numpy

sources = ["hs/subfolder/detect.pyx",
           "hs/subfolder/Donline.cpp",
           "hs/subfolder/Handler.cpp",
           "hs/subfolder/Process.cpp",
           "hs/subfolder/Filter.cpp",
           "hs/subfolder/Localize.cpp"]

exts = [Extension(name='hs.detect',
                  sources=sources,
                  extra_compile_args=['-std=c++11', '-O3'],
                  include_dirs=[numpy.get_include()])]

setup(
    ext_modules=cythonize(exts),
    include_dirs=[numpy.get_include()]
)

有一个包含一些纯Python的包,还有一个包含Cython文件的子模块。setup.py在父文件夹中,而不是Cython文件夹中:

setup.py
hs/
    some_python.py
    subfolder/
        detect.pyx
        Donline.cpp
        ...etc

现在,setup.py正确地编译了module/submodule/file1.cpp等所有文件,并将构建保存到build/temp.linux-x86_64-3.6/module/submodule/file1.o。然而,在那之后,它尝试编译一个名为file1.cpp的文件,这个文件并不存在(正确的文件是module/submodule/file1.cpp,并且已经被编译)。

gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Ihs/subfolder -I/[...]/python3.6/site-packages/numpy/core/include -I/[...]/python3.6/site-packages/numpy/core/include -I/[...]/include -I/disk/scratch/miniconda/envs/my_default/include/python3.6m -c Donline.cpp -o build/temp.linux-x86_64-3.6/Donline.o -std=c++11 -O3
gcc: error: Donline.cpp: No such file or directory
gcc: fatal error: no input files
compilation terminated.
error: command 'gcc' failed with exit status 4

我很困惑,这完全阻止了我的代码编译...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-03 21:35:11

结果是.pyx文件包含一行

# distutils: sources = Donline.cpp Handler.cpp Process.cpp Filter.cpp Localize.cpp

它告诉distutils要编译什么。我没有意识到这一点,而且因为它看起来非常像一个注释掉的行,所以我没有意识到它在那里。

除了包含在setup.py文件中的那些之外,Cython还会尝试编译这些源代码,即两个源代码列表中的任何一个都不会覆盖另一个。显然,尽管这些源文件列在pyx文件中,但它们应该位于相对于setup.py文件所在文件的路径中,或者可能是相对于我从中调用python的文件夹的路径。

不管怎样,删除这行代码就解决了问题。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50448026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档