gpt4 book ai didi

python - Cython 尝试编译两次,但失败了

转载 作者:太空狗 更新时间:2023-10-29 18:07:30 25 4
gpt4 key购买 nike

我有一个 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/文件1.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

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

最佳答案

原来.pyx文件包含一行

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

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

Cython 尝试编译这些,而不是 setup.py 文件中包含的那些,即两个源列表都没有覆盖另一个。显然,尽管这些源在子文件夹中的 pyx 文件中列出,但预计它们位于相对于 setup.py 文件所在的文件的路径中,或者可能相对于文件夹我正在调用 python。

无论如何,删除该行解决了问题。

关于python - Cython 尝试编译两次,但失败了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50448026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com