首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用distutils再生cython扩展

用distutils再生cython扩展
EN

Stack Overflow用户
提问于 2015-08-30 12:36:15
回答 1查看 1.1K关注 0票数 3

我有一个cython文件,它生成一个不同的.c文件,这取决于它是为python 2编译的还是为python 3编译的。

代码语言:javascript
复制
from .mp_utils import PY3

if PY3:
    builtin = (int, float, str, complex)
else:
    builtin = (int, float, str, long, complex, file)

由于mp_utils具有这样的功能:

代码语言:javascript
复制
PY3 = sys.version > '3'

这个扩展是由distutils构建的。setup.py有:

代码语言:javascript
复制
getsize = Extension(
    'memprof.getsize',
    sources=['memprof/getsize.pyx']
)

setup(
    # [...]
    cmdclass={'build_ext': build_ext},
    ext_modules=[getsize],
)

然而,cython并不知道它必须在每次调用.c时重新构建python setup.py install

代码语言:javascript
复制
# python3 setup.py test
running test
running egg_info
writing dependency_links to memprof.egg-info/dependency_links.txt
writing requirements to memprof.egg-info/requires.txt
writing memprof.egg-info/PKG-INFO
writing top-level names to memprof.egg-info/top_level.txt
reading manifest file 'memprof.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'memprof.egg-info/SOURCES.txt'
running build_ext
skipping 'memprof/getsize.c' Cython extension (up-to-date)
building 'memprof.getsize' extension
[...]

这是错误的,memprof/getsize.c不是最新的,它是为python2版本构建的getsize.c。它必须重建。我如何告诉distutils (或cython),它必须在每次调用时重新生成.c文件?

我知道我可以触摸memprof/getsize.pyx或者手动删除memprof/getsize.c,但是你必须记住,这不是我想要的。我想要的东西,当我做python3 setup.py安装,它安装正确的东西,无论我以前构建了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-31 21:28:54

setup.py选项可以在setup.cfg文件中定义。

因此,类似于您的setup.cfg中的内容

代码语言:javascript
复制
[build_ext]
force=1

每次都会强制编译。

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

https://stackoverflow.com/questions/32296637

复制
相关文章

相似问题

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