如何从函数中导入模块,但导入的模块在函数范围之外仍然存在?
How can I import a module from within a function, but have the imported module persist outside the function scope?
问题
出于可能令人费解的原因(见下文),我想执行以下操作:
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"
问题
出于可能令人费解的原因(见下文),我想执行以下操作:
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"