Python PyCharm程序化____;生成和语法高亮显示
我正在使用此装饰器以一种干燥的方式管理Python PyCharm程序化____;生成和语法高亮显示,python,pycharm,static-analysis,Python,Pycharm,Static Analysis,我正在使用此装饰器以一种干燥的方式管理\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu def export(obj): mod = sys.modules[obj.__module__] if hasattr(mod, '__all__'): mod.__all__.append(obj.__name__) else: mod.__all__ = [obj
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
def export(obj):
mod = sys.modules[obj.__module__]
if hasattr(mod, '__all__'):
mod.__all__.append(obj.__name__)
else:
mod.__all__ = [obj.__name__]
return obj
对于使用import*
PyCharm导入的名称,会发出未解析引用
错误,这是可以理解的,因为它在分析之前不会运行代码。但这显然是一个不便之处
你将如何解决它(或者可能已经解决)
我的假设:
- 添加一些自动linter插件或修改现有PyCharm的检查代码都可以
- 实际上正在编辑
.py
源代码的东西是可行的,但并不好
- 这种方法可能不是最好的方法,因此建议采用另一种方便的出口处理方法也不错
您可能对另一种管理\uuuuuu all\uuuuuuu
的方法感兴趣:
这提供了一个start\u all()
和end\u all()
函数,用于将要访问的项目放置在模块中。这种方法适用于PyCharms代码检查
from auto_all import start_all, end_all
# Imports outside the start and end function calls are not included in __all__.
from pathlib import Path
def a_private_function():
print("This is a private function.")
# Start defining externally accessible objects.
start_all(globals())
def a_public_function():
print("This is a public function.")
# Stop defining externally accessible objects.
end_all(globals())
我觉得这是一种合理的管理\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。该包的源代码很小,因此如果需要,可以很容易地直接包含在代码中,以避免外部依赖
我之所以使用它,是因为我有一些模块,其中许多项目需要“导出”,并且我希望将导入的项目排除在导出列表之外。我有多个开发人员在处理代码,很容易添加新项目,而忘记将它们包含在\uuu all\uuuu
中,因此自动化这很有帮助。可以使用pyi存根,请参见和@user2235698这是一个很好的方法!您能否建议一些方法来自动更新这个存根,并提供一个py、pyi文件及其用法的简单示例(看看您的想法应该如何工作)?我想勾选这个答案。我还没有看到足够好的工具来自动更新存根,你们可以从手动更新存根开始,让它们更精确。这可能是一个很好的例子,大多数过梁都支持这样的短柱。好吧,仍然不是很适合过梁,但我想项目最终会达到这个目的。现在,这是最接近完美的解决方案,谢谢分享!