在PyCharm中隐藏 __ init __ .py文件

在PyCharm中隐藏 __ init __ .py文件

最近在重构一个Django项目,有很多的空__init__.py文件,在高版本的Python中,这个空文件可以被省略,但是Django的一些组件似乎仍然依赖这些声明文件。因为每个包里都有一个,而且里面又是空的,所有寻找了一些方法从视觉上隐藏这些“垃圾”。

省流版本

创建一个新的作用域规则

在PyCharm设置中找到外观与行为 -> 作用域

点加号,新建一个本地规则,比如叫作no_init

在模式一栏填入文件的显示规则为!file:*/__init__.py,即最后如下图:

创建一个新作用域
在文件视图中选择这个新的作用域规则
应用这个作用域

完事!

好奇

__ init __.py 有啥用?

你经常看到却经常忽视的__init__.py有什么用?

  • 作为包的标识符:当一个文件夹中包含了 __init__.py 文件时,Python 将其视为一个。这样,包内部的文件之间可以使用相对导入,而不是绝对路径。这对于精简代码和提高可读性非常有用。
  • 导入模块和函数:在包的内部,我们可以先把需要的函数、常量、类导入到 __init__.py 中。然后,其他文件就可以使用 from 包名 import 函数名 的方式导入这些内容,而不用关心包的绝对路径。
为什么在写代码的时候,没有包含__ init __.py文件的文件夹也可以被作为包导入

PEP 420 – Implicit Namespace Packages

这个提案(自Python 3.3 开始生效)介绍了一种新的Python包类型,即“命名空间包”(namespace package)。命名空间包允许将单个Python包拆分为多个磁盘上的目录。与现有的pkgutil.extend_path和setuptools.declare_namespace不同,这个提案中的命名空间包不需要在__init__.py中定义__path__,而是由导入机制自动构建。命名空间包不受固定__path__的限制,而是在每个部分加载时动态计算路径。此外,命名空间包可以跨多个目录分布,无需提供__init__.py文件。这个提案的目标是统一命名空间包的机制,以便更好地支持Python包的拆分和分发。

关于PyCharm中的作用域

参考:配置 PyCharm/范围和文件颜色


在PyCharm中隐藏 __ init __ .py文件
http://www.coooolfan.com/2024/04/26/hide-init-py-in-pycharm/
作者
Coolfan
发布于
2024年4月26日
许可协议