Python setup.py添加选项(又称setup.py--启用功能)
我正在寻找一种在安装阶段在python(扩展)模块中包含一些特性的方法 以实际的方式: 我有一个python库,它有两个相同函数的实现,一个是内部的(slow),另一个是依赖于外部库的(fast,在C中) 我希望此库是可选的,可以在编译/安装时使用以下标志激活:Python setup.py添加选项(又称setup.py--启用功能),python,packaging,distutils,Python,Packaging,Distutils,我正在寻找一种在安装阶段在python(扩展)模块中包含一些特性的方法 以实际的方式: 我有一个python库,它有两个相同函数的实现,一个是内部的(slow),另一个是依赖于外部库的(fast,在C中) 我希望此库是可选的,可以在编译/安装时使用以下标志激活: python setup.py install # (it doesn't include the fast library) python setup.py --enable-fast install 我必须使用Distutils,
python setup.py install # (it doesn't include the fast library)
python setup.py --enable-fast install
我必须使用Distutils,但是所有的解决方案都被广泛接受 distutils的文档包括。相关建议似乎是从
distutils.command.*
模块(例如build\u py
或install
)中对相关类进行子类化,并告诉setup
使用新版本(通过cmdclass
参数,该参数是将命令映射到用于执行命令的类的字典)。请参阅任何命令类的源代码(例如)为了更好地了解添加新选项需要做些什么。一个确切说明您需要的示例是's,它专门用于相同的目的-更快的C实现。为了了解SA如何实现它,您需要查看两个文件:
1) 。从下面的摘录中可以看出,它们使用setuptools
和distutils
处理案例:
try:
from setuptools import setup, Extension, Feature
except ImportError:
from distutils.core import setup, Extension
Feature = None
稍后将检查if功能:
,并使用变量extra
为每种情况正确配置扩展,该变量随后添加到setup()
函数中
2) :此处查看如何定义BaseRowProxy
:
try:
from sqlalchemy.cresultproxy import BaseRowProxy
except ImportError:
class BaseRowProxy(object):
#....
因此,基本上,一旦安装了C扩展(在安装过程中使用
——带有cextensions
标志),就会使用C实现。否则,将使用类/函数的纯Python实现。非常感谢您的回答,每个答案都值得接受!