你想要的一个例子是sqlalchemy的cextensions,它们专门用于相同的目的 - 更快的 C 实现。为了了解 SA 如何实现它,您需要查看 2 个文件:
1)设置.py。正如您从下面的摘录中看到的那样,他们使用setuptools
和处理案例distutils
:
try:
from setuptools import setup, Extension, Feature
except ImportError:
from distutils.core import setup, Extension
Feature = None
稍后进行检查if Feature:
,并使用 variable 为每种情况正确配置扩展extra
,稍后将其添加到setup()
函数中。
2)base.py:这里看看是怎么BaseRowProxy
定义的:
try:
from sqlalchemy.cresultproxy import BaseRowProxy
except ImportError:
class BaseRowProxy(object):
#....
所以基本上一旦安装了 C 扩展(--with-cextensions
在安装过程中使用标志),将使用 C 实现。否则,将使用类/函数的纯 Python 实现。