首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cythonize函数在扩展名中包含根文件夹

Cythonize函数在扩展名中包含根文件夹
EN

Stack Overflow用户
提问于 2018-04-21 19:22:22
回答 2查看 330关注 0票数 1

问题所在

我有一个项目结构,看起来像这样:

代码语言:javascript
复制
\t_src
    \mylib
        __init__.py
        module.pyx
        (... other .py sources)
setup.py
(other non .py files)

我的setup.py使用cythonize编译.pyx文件:

代码语言:javascript
复制
setup(
    (...)
    ext_modules=cythonize(['mylib/**/*.pyx'])
    (...)
)

它基本上可以工作,但当我创建一个二进制轮子(使用python setup.py build_ext bdist_wheel clean --all)时,我的轮子文件具有这样的结构:

代码语言:javascript
复制
\mylib
    (all python modules)
\t_src
    \mylib
        (compiled cython modules)

这并不好,因为我希望编译后的cython模块也在mylib根文件夹中。

可能的原因

稍微调查一下,问题似乎出在从cythonize()函数生成的扩展名上,这些扩展名都以t_src开头,例如:

代码语言:javascript
复制
t_src.mylib.module1

解决方法

如果我实际在setup()函数之前运行cythonize()函数,并手动从扩展名中剥离"t_src."字符串,那么我的轮子就像预期的那样在mylib中包含了所有内容:

代码语言:javascript
复制
ext_modules=cythonize(['mylib/**/*.pyx'])

for module in ext_modules:
    module.name = module.name.replace("t_src.","")

setup(
    (...)
    ext_modules=ext_modules
    (...)
)

这是意料之中的行为还是我做错了什么?这可能是什么原因造成的?现在这个变通方法就可以了,但是我想知道解决这个问题的正确方法。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-04-22 07:46:35

我基本上将我的项目结构更改为:

代码语言:javascript
复制
\t_src
    \src
        \mylib
            (files)
    \tests
        (files)
    setup.py
    (other files)

并将此添加到我的setup.py

代码语言:javascript
复制
packages=find_packages('src'),
package_dir={'': 'src'},

然后我就没有更多的问题了,Cython化的模块和其他python文件一起被放在mylib文件夹中,就像它应该的那样。

在意识到我的测试使用的是当前文件夹上的代码而不是已安装的包后,我实际上更改了布局。幸运的是,这也解决了这个问题。

票数 1
EN

Stack Overflow用户

发布于 2020-09-23 05:34:38

看看这个:https://groups.google.com/g/cython-users/c/d-3Clm2EkHs

您的根目录可能包含一个__init__.py。这使得它成为一个python模块。删除该文件应该可以解决您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49955230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档