from distutils.core import setupfrom Cython.Build import cythonizesetup( 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.so文件放在与verifIEr_c.pyx相同的文件夹中.
我没有找到记录此行为的位置,但我想将verifIEr_c.so保存在与verifIEr_c.pyx相同的文件夹中,但每次运行setup.py时都不必删除__init__.py.我怎样才能做到这一点?
解决方法 正如评论中所提到的,setup.py不应该存在于您的包中.据我所知,build_ext命令没有选项(除了–inplace)以指定目标路径.您可以找到一些文档 here.此外,this question也涉及类似的主题.要适应所需的包结构,您的包必须如下所示:
c_ext/ setup.py myfile.py verifIEr/ __init__.py verifIEr_c.pyx
您将获得一个存在于验证程序包中的扩展程序:
me@machine:~/c_ext/$python setup.py build_ext --inplacec_ext/ setup.py myfile.py verifIEr/ __init__.py verifIEr_c.pyx verifIEr_c.so
然后,您可以从验证程序包导入verifIEr_c.例如,从myfile.py看起来像:
from verifIEr import verifIEr_c...
您可以为每个Cython扩展管理单独的包(和文件夹),或者创建一个包含所有这些扩展的子文件夹.您还必须将其他模块传递给cythonize.它可以处理glob pattern,glob模式列表或distutils.Extensions对象列表.后者可以方便地指定cython编译器指令
from distutils.core import setupfrom distutils.extension import Extensionfrom Cython.Build import cythonizeextensions = [ Extension("verifIEr_c",["verifIEr/verifIEr_c.pyx"]),Extension("something_else",["foobar/something_else.pyx"] compiler_directives={'embedsignature': True}),]setup( ext_modules=cythonize(extensions),)
我希望这有帮助:)
总结以上是内存溢出为你收集整理的当__init__.py存在时,使用setup构建cython扩展的Python会创建子文件夹全部内容,希望文章能够帮你解决当__init__.py存在时,使用setup构建cython扩展的Python会创建子文件夹所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)