我需要在两个不同的python环境中运行一些代码。 有一个库,我使用的是两个不同版本。
Env1.
mylib.myfun(*args) # as expected
mylib.myfun(*args,extra_arg=val) # raise error
Env2.
mylib.myfun(*args) # raise warning
mylib.myfun(*args,extra_arg=val) # as expected
理想情况下,我想在两个环境中运行相同的代码并获得相同的结果。 我当时想摆脱固定装置
def fix_myfun():
if mylib.version<needed:
mylib.myfun(*args)
else:
mylib.myfun(*args)
这是这样做的Python方式吗?
答案 0 :(得分:1)
您可以尝试检查支票版本:
>>> import re
>>> print re.__version__
2.2.1
>>> re.__version__ == "2.2.1"
True
然后检查:
(这里显示了如何检查2.2.2版和最新版本。)
>>> bool(re.match(r"2.2.(?:[2-9]|\d\d\d*)", re.__version__))
False
>>> bool(re.match(r"2.2.(?:[2-9]|\d\d\d*)", "2.2.2"))
True
答案 1 :(得分:1)
Python函数是对象,并且是其模块的属性,因此您只需在启动时(即在您的主脚本中)对模块进行一次猴子修补:
myfun
注意:此代码在每个过程中只能执行一次(否则mylib.myfun
将被修补多次)。确保这一点的最佳方法是将其放在脚本的顶部,或者放在任何使用sys.modules
之前导入的模块中-对于模块,顶层代码仅执行一次(每个进程)第一次导入模块时,随后的导入将仅从- hosts: localhost
gather_facts: no
vars:
x: a
y: 1
a1b: 'super_variable'
tasks:
- name: templating
template:
src: test.j2
dest: tmp.j2
中检索已加载的模块。