Python 当还用作类型提示时,如何处理额外的要求?

Python 当还用作类型提示时,如何处理额外的要求?,python,python-3.x,python-import,setuptools,python-importlib,Python,Python 3.x,Python Import,Setuptools,Python Importlib,我想更新一个库,使需求是可选的(使用) 不幸的是,从可选需求导入的类在库中的任何地方都用作类型提示。以下是一个例子: 输入导入列表中的 尝试: 从extra.sub导入ExtraFoo,ExtraBar 除恐怖外: 通过 def可选(foo:ExtraFoo)->列表[ExtraBar]: 通过 def问候语(名称:str)->str: 返回“Hello”+name 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 问候语(‘约翰·史密斯’) 在本例中,如

我想更新一个库,使需求是可选的(使用)

不幸的是,从可选需求导入的类在库中的任何地方都用作类型提示。以下是一个例子:

输入导入列表中的

尝试:
从extra.sub导入ExtraFoo,ExtraBar
除恐怖外:
通过
def可选(foo:ExtraFoo)->列表[ExtraBar]:
通过
def问候语(名称:str)->str:
返回“Hello”+name
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
问候语(‘约翰·史密斯’)
在本例中,如果未安装
extra
,我们将不使用
optional()
。实际上,这样的代码将引发
namererror
,因为
ExtraFoo
ExtraBar
被用作类型提示

一个可能的修复方法是在
块中声明
类ExtraFoo:pass
类ExtraBar:pass
。但是,在同一模块中的多个类型的代码中,到处都存在类似的情况


我想避免用虚假进口声明来污染代码。是否有处理这种情况的常用方法(例如代理模块)?

我不确定我是否了解这是一个问题,我可能没有抓住要点。谁或哪个工具正在抱怨缺少
框架
类型?
列表[“框架”]
?除了使用文字字符串外,您还可以将类型提示移动到存根文件中,或将包声明为必需的依赖项。@sinoroc我更改了示例以减少混淆。@DurandA好的,这会在运行时触发错误,我确实没有抓住要点。我以为像mypy这样的工具在抱怨。霍夫林的建议似乎不错。我不确定我是否明白这是一个问题,我可能没有抓住要点。谁或哪个工具正在抱怨缺少
框架
类型?
列表[“框架”]
?除了使用文字字符串外,您还可以将类型提示移动到存根文件中,或将包声明为必需的依赖项。@sinoroc我更改了示例以减少混淆。@DurandA好的,这会在运行时触发错误,我确实没有抓住要点。我以为像mypy这样的工具在抱怨。霍夫林的建议似乎不错。