区分本地导入和系统导入
Differentiate local imports from system imports
我刚刚写了这段代码:
import os
import helpers
我立刻意识到,稍后当我读到这篇文章时,我会想 helpers
是一个系统模块还是我编写并放在项目目录中的模块(我不记得了很多!:)).
有什么 Pythonic 方法可以在这段代码中明确说明 os
是一个系统模块,而 helpers
是我项目的一部分? 我可以写对此效果的评论,但这不会很好。
其他语言如何处理:
在 C++ 中,这个问题不存在,因为系统包含被 <>
包围,而项目相关包含被 ""
包围。
该问题的 C# 解决方案是无需任何导入语句即可访问当前项目中任何文件中定义的功能。
编辑: 我发现 a related PEP 引入了 from . import someModule
语法来导入项目本地模块。我要试试看。但这还不够。对于导入系统模块,我仍然只有通用的 import blah
语法。
在我工作过的几家公司和我见过的几个开源项目中,这只是通过将导入语句分成几组并用换行符将它们分开的编码约定来完成的。
组始终按以下顺序排列:核心库导入,然后是第三方导入,然后是第一方导入。
所以分组的例子是这样的:
import os
import sys
from argparse import ArgumentParser
import requests
import termcolor
from my_app import my_module1
from my_app import my_module2
与 Python 中的许多内容一样,这种风格只是一种编码约定。但它很常见,所以我认为大多数 Python 开发人员应该很容易理解这些分组。的确,它甚至在PEP8中被推荐。
有一个名为 isort 的流行工具可以自动为您对这些导入进行分组。
如果您想要更明确的内容,没有什么可以阻止您对同一项目代码使用相对导入。那么就会100%清楚这些模块来自同一个包。
我刚刚写了这段代码:
import os
import helpers
我立刻意识到,稍后当我读到这篇文章时,我会想 helpers
是一个系统模块还是我编写并放在项目目录中的模块(我不记得了很多!:)).
有什么 Pythonic 方法可以在这段代码中明确说明 os
是一个系统模块,而 helpers
是我项目的一部分? 我可以写对此效果的评论,但这不会很好。
其他语言如何处理:
在 C++ 中,这个问题不存在,因为系统包含被
<>
包围,而项目相关包含被""
包围。该问题的 C# 解决方案是无需任何导入语句即可访问当前项目中任何文件中定义的功能。
编辑: 我发现 a related PEP 引入了 from . import someModule
语法来导入项目本地模块。我要试试看。但这还不够。对于导入系统模块,我仍然只有通用的 import blah
语法。
在我工作过的几家公司和我见过的几个开源项目中,这只是通过将导入语句分成几组并用换行符将它们分开的编码约定来完成的。
组始终按以下顺序排列:核心库导入,然后是第三方导入,然后是第一方导入。
所以分组的例子是这样的:
import os
import sys
from argparse import ArgumentParser
import requests
import termcolor
from my_app import my_module1
from my_app import my_module2
与 Python 中的许多内容一样,这种风格只是一种编码约定。但它很常见,所以我认为大多数 Python 开发人员应该很容易理解这些分组。的确,它甚至在PEP8中被推荐。
有一个名为 isort 的流行工具可以自动为您对这些导入进行分组。
如果您想要更明确的内容,没有什么可以阻止您对同一项目代码使用相对导入。那么就会100%清楚这些模块来自同一个包。