我有一个cython文件,它生成一个不同的.c文件,这取决于它是为python 2编译的还是为python 3编译的。
from .mp_utils import PY3
if PY3:
builtin = (int, float, str, complex)
else:
builtin = (int, float, str, long, complex, file)由于mp_utils具有这样的功能:
PY3 = sys.version > '3'这个扩展是由distutils构建的。setup.py有:
getsize = Extension(
'memprof.getsize',
sources=['memprof/getsize.pyx']
)
setup(
# [...]
cmdclass={'build_ext': build_ext},
ext_modules=[getsize],
)然而,cython并不知道它必须在每次调用.c时重新构建python setup.py install。
# 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安装,它安装正确的东西,无论我以前构建了什么。
发布于 2015-08-31 21:28:54
setup.py选项可以在setup.cfg文件中定义。
因此,类似于您的setup.cfg中的内容
[build_ext]
force=1每次都会强制编译。
https://stackoverflow.com/questions/32296637
复制相似问题