python - 如何从函数内导入模块,但导入的模块在函数范围之外仍然存在?
问题描述
问题
出于可能令人费解的原因(见下文),我想做以下事情:
def import_np():
import numpy
return numpy.array([0])
def test_np():
return numpy.array([1])
现在,如果我尝试调用这两种方法,第一种方法有效,但第二种方法无效:它说numpy is not defined
. 我怎样才能解决这个问题?
背景
我想导入一个我们有很多版本的内部模块(编辑:澄清一下,我们为每个版本都分支)。理想情况下,我想参数化 import 语句,但我不能这样做,所以我想我可以有一个看起来像这样的函数:
def import_version(path_to_version):
sys.path.append(path_to_version)
import the_module
但是,我不能the_module
在此方法之外使用,这导致了我上面的问题。
解决方案
您可以将包版本的路径用作脚本的全局配置变量。然后您可以sys.path.append
使用该全局变量进行函数调用,并且导入范围是您要在其中导入模块的整个脚本。
我建议您在模块加载失败时捕获异常。
import config
MODULE_PATH = config.path_to_version
sys.path.append(MODULE_PATH)
try:
import the_module
except Exception as exp:
// exception logging
这里有一个config.py
包含模块版本路径的文件
path_to_version="your-path"