只有在运行模块中的函数后,如何才能在Python模块中导入模块?

时间:2017-02-15 00:53:30

标签: python module python-import dependency-management

我想要一个Python模块,我只是在运行模块中的函数时才导入依赖模块。这是因为依赖模块非常复杂(即它设置运行的服务器程序等)并且仅在我的模块将在其上使用的一些系统上可用。我想像这样使用我的模块:

import mymodule
mymodule.simple_function() # just a simple function to be used on any system

mymodule.import_complex_dependencies()
mymodule.function_that_uses_functionality_of_the_complex_dependency_module()

假设我不打算将我的模块拆分成两个并且我不打算创建一个子模块,那么会有什么办法呢?

2 个答案:

答案 0 :(得分:4)

如果只有某个特定功能需要该模块,只有该特定功能导入模块:

def func_with_dependencies():
    import dependency
    ...

答案 1 :(得分:0)

您可以这样做:

from pyspark.sql import functions as f

rdd = spark.sparkContext.parallelize([(['A'], [0]), (['B', 'C'], [1]), (['D', 'E', 'F'], [0, 2])])
df = spark.createDataFrame(rdd, ['myarray', 'myindices'])
my_UDF = f.UserDefinedFunction(lambda x, y: map(lambda z: x[z], y), returnType=ArrayType(StringType()))
res = df.withColumn('result', my_UDF(df['myarray'], df['myindices']))
res.show(truncate=False)

output:
+---------+---------+------+
|myarray  |myindices|result|
+---------+---------+------+
|[A]      |[0]      |[A]   |
|[B, C]   |[1]      |[C]   |
|[D, E, F]|[0, 2]   |[D, F]|
+---------+---------+------+

这样复杂的东西只能加载一次。