问题
我有一个看起来像这样的项目结构:
\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)
这不好,因为我希望在mylib
根文件夹中也有已编译的 cython 模块。
可能的原因
稍微调查一下,问题似乎出在从cythonize()
函数生成的扩展名上,这些扩展名都以 开头t_src
,例如:
t_src.mylib.module1
解决方法
如果我实际上在cythonize()
函数之前运行该setup()
函数并手动从扩展名中删除"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
(...)
)
这是某种预期的行为还是我做错了什么?这可能是什么原因造成的?现在这个解决方法可以,但我想知道解决这个问题的正确方法。
谢谢!