【发布时间】:2016-04-11 17:15:48
【问题描述】:
我正在尝试使用以下setup.py 编译一个简单的cython 模块:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("verifier_c.pyx"),
)
我有以下文件夹结构:
.
c_ext/
__init__.py
verifier_c.pyx
setup.py
如果我运行以下命令:
python setup.py build_ext --inplace
我得到一个额外的c_ext 子文件夹,如下所示:
.
c_ext/
build/
...
c_ext/
verifier_c.so
__init__.py
verifier_c.pyx
setup.py
但如果我删除 __init__.py 文件,我会在与 verifier_c.pyx 相同的文件夹中获得 verifier_c.so 文件。
我没有找到记录此行为的位置,但我想将 verifier_c.so 保留在与 verifier_c.pyx 相同的文件夹中,但不必在每次运行 setup.py 时删除 __init__.py。我怎样才能做到这一点?
【问题讨论】:
-
setup.py位于错误的文件夹中。将其上移一级并相应地更改cythonize()的参数。然后.so文件应该显示在已经存在的c_ext/文件夹中(如果存在__init__.py文件,则它是一个包。 -
@BlackJack 不能将
setup.py和.pyx文件放在同一个文件夹中并在此文件夹中生成.so吗?我想将c部分与我的应用程序的其余部分完全分开(因此不要将setup.py放在基本应用程序中)。 -
我不知道这是否可能,但在那个位置使用
setup.py是错误的。它是您组织它的方式的包的一部分。这种方式有一个c_ext.setup模块,这是没有意义的。