Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python setup.py添加选项(又称setup.py--启用功能)_Python_Packaging_Distutils - Fatal编程技术网

Python setup.py添加选项(又称setup.py--启用功能)

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(扩展)模块中包含一些特性的方法

以实际的方式:

我有一个python库,它有两个相同函数的实现,一个是内部的(slow),另一个是依赖于外部库的(fast,在C中)

我希望此库是可选的,可以在编译/安装时使用以下标志激活:

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实现。

非常感谢您的回答,每个答案都值得接受!