我正在构建一个python模块,我不知何故被卡住了。 我想使一些功能可选,即如果禁用它们就不会存在(即使不是方法)。
我的模块由C和Python部分组成;我搜索类似于#ifdefs的Python,因为如果C中的一个功能被禁用,则不应安装与Python相关的东西。
有什么建议吗?
答案 0 :(得分:0)
至少没有这样的东西,因为它在C中不起作用。
相反,我建议你做这样的事情:
如果某个部件是可选的,因为它需要安装更多第三方库,请在setup.py See here
中定义一些extras
如果您想支持“可插拔”功能(例如某种插件,......),请使用setuptools'entry points并在多个软件包中拆分功能。然后,只安装所需的软件包。
答案 1 :(得分:0)
它与任何其他类型的if语句没有什么不同。问题是,函数定义(不仅仅是声明)实际上就像任何其他代码一样,所以你可以这样做(复制到一个单独的文件并导入为模块):
X = 1
class A(object):
def __init__(self):
pass
def funcA(self):
return 'A'
if X == 0:
def funcB(self):
return 'B'
# then at console, if above is called 'modtest.py'...
import modtest
a = modtest.A()
a.<tab>
a.funcA
# Now change the above to say X = 0, and
reload(modtest)
a2 = modtest.A()
a2.<tab>
a2.funcA a2.funcB
if X == 0
实际上确定python是否会运行定义函数的代码。请注意,这是在模块导入时完成的 - 您无法动态更改X'并使用funcB获取一些A类,而不使用某些类;在定义类时,它只检查X一次,从那时起只传回它已经解析过的类A.