问题所在
我有一个项目结构,看起来像这样:
\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
(...)
)这是意料之中的行为还是我做错了什么?这可能是什么原因造成的?现在这个变通方法就可以了,但是我想知道解决这个问题的正确方法。
谢谢!
发布于 2018-04-22 07:46:35
我基本上将我的项目结构更改为:
\t_src
\src
\mylib
(files)
\tests
(files)
setup.py
(other files)并将此添加到我的setup.py中
packages=find_packages('src'),
package_dir={'': 'src'},然后我就没有更多的问题了,Cython化的模块和其他python文件一起被放在mylib文件夹中,就像它应该的那样。
在意识到我的测试使用的是当前文件夹上的代码而不是已安装的包后,我实际上更改了布局。幸运的是,这也解决了这个问题。
发布于 2020-09-23 05:34:38
看看这个:https://groups.google.com/g/cython-users/c/d-3Clm2EkHs
您的根目录可能包含一个__init__.py。这使得它成为一个python模块。删除该文件应该可以解决您的问题。
https://stackoverflow.com/questions/49955230
复制相似问题