首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启用添加选项(也称为setup.py -- setup.py --feature)

启用添加选项(也称为setup.py -- setup.py --feature)
EN

Stack Overflow用户
提问于 2010-04-26 02:05:10
回答 2查看 2.6K关注 0票数 5

我正在寻找一种在安装阶段在python (扩展)模块中包含一些功能的方法。

以实际的方式:

我有一个python库,它有两个相同函数的实现,一个是内部的(慢的),另一个是依赖于外部的(快速的,用C编写的)。

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

代码语言:javascript
复制
python setup.py install # (it doesn't include the fast library)
python setup.py --enable-fast install

我必须使用Distutils,但是所有的解决方案都是可以接受的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-26 04:43:58

你想要的一个例子就是sqlalchemycextensions,它们是专门为相同的目的而设计的--更快的C实现。

1) setup.py。从下面的摘录中可以看到,它们使用setuptoolsdistutils处理情况

代码语言:javascript
复制
try:
    from setuptools import setup, Extension, Feature
except ImportError:
    from distutils.core import setup, Extension
    Feature = None

稍后将使用变量extra为每种情况正确配置检查if Feature:和扩展,该变量后来被添加到setup()函数中。

2) base.py:这里看看BaseRowProxy是如何定义的:

代码语言:javascript
复制
try:
    from sqlalchemy.cresultproxy import BaseRowProxy
except ImportError:
    class BaseRowProxy(object):
        #....

因此,基本上一旦安装了C扩展(在安装过程中使用--with-cextensions标志),就会使用C实现。否则,将使用类/函数的纯Python实现。

票数 2
EN

Stack Overflow用户

发布于 2010-04-26 02:24:56

distutils的文档包括a section on extending the standard functionality。相关的建议似乎是从distutils.command.*模块(如build_pyinstall)中子类化相关的类,并告诉setup使用您的新版本(通过cmdclass参数,这是一个将命令映射到用于执行命令的类的字典)。查看任何命令类的源代码(例如the install command),以便更好地了解如何添加新选项。

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

https://stackoverflow.com/questions/2709278

复制
相关文章

相似问题

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