将Polars API扩展置于专用模块后,如何从目标模块导入?
问题
我按照Polars的规范扩展了其API,将注册代码放在extensions.py文件中:
import polars as pl @pl.api.register_expr_namespace("greetings") class Greetings: def __init__(self, expr: pl.Expr): self._expr = expr def hello(self) -> pl.Expr: return (pl.lit("Hello ") + self._expr).alias("hi there") def goodbye(self) -> pl.Expr: return (pl.lit("Sayōnara ") + self._expr).alias("bye")
现在需要在另一个模块target.py中使用这个扩展的greetings命名空间,确保以下代码能正常调用扩展方法:
import polars as pl pl.DataFrame(data=["world", "world!", "world!!"]).select( [ pl.all().greetings.hello(), pl.all().greetings.goodbye(), ] )
请问该如何在target.py中导入扩展模块?
解决方案
要让greetings命名空间生效,只需在target.py中导入extensions模块即可,有几种常用方式:
方式1:直接导入整个扩展模块
在target.py的开头添加导入语句,触发模块初始化时的命名空间注册:
import polars as pl import extensions # 导入后,装饰器会自动注册greetings命名空间
方式2:从扩展模块导入任意成员
即使你不需要直接使用导入的成员,只要触发模块加载,就能完成注册:
import polars as pl from extensions import Greetings # 导入类,同样会执行模块内的注册逻辑
或者使用通配符导入(不推荐但有效):
import polars as pl from extensions import *
关键注意点
- 确保
extensions.py与target.py在同一目录,或位于Python可搜索的路径中(若不在同一目录,可通过修改sys.path或使用相对导入解决)。 - 导入操作必须在调用
greetings命名空间方法之前执行,建议放在文件开头。
内容的提问来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

