【发布时间】:2018-04-21 11:22:22
【问题描述】:
问题
我的项目结构如下所示:
\t_src
\mylib
__init__.py
module.pyx
(... other .py sources)
setup.py
(other non .py files)
我的setup.py 使用cythonize 编译.pyx 文件:
setup(
(...)
ext_modules=cythonize(['mylib/**/*.pyx'])
(...)
)
它主要工作,但是当我创建一个二进制轮子(使用python setup.py build_ext bdist_wheel clean --all)时,我的轮子文件具有以下结构:
\mylib
(all python modules)
\t_src
\mylib
(compiled cython modules)
这并不好,因为我希望编译的 cython 模块也在 mylib 根文件夹中。
可能的原因
调查了一下,似乎问题出在cythonize()函数生成的扩展名上,它们都以t_src开头,比如:
t_src.mylib.module1
解决方法
如果我实际上在setup() 函数之前运行cythonize() 函数并手动从扩展名中删除"t_src." 字符串,那么我的轮子会像预期的那样在mylib 中包含所有内容:
ext_modules=cythonize(['mylib/**/*.pyx'])
for module in ext_modules:
module.name = module.name.replace("t_src.","")
setup(
(...)
ext_modules=ext_modules
(...)
)
这是某种预期的行为还是我做错了什么?这可能是什么原因造成的?目前这种解决方法可以,但我想知道解决这个问题的正确方法。
谢谢!
【问题讨论】: