区分本地导入和系统导入

时间:2016-07-19 16:35:23

标签: python python-import

我刚写了这段代码:

import os
import helpers

我立刻意识到,稍后当我读到这篇文章时,我会想知道helpers是一个系统模块,还是我已编写并放入项目目录的那个(我不记得那么多! :))

在此代码中明确说明os是系统模块并且helpers是我项目的一部分的任何Pythonic方法吗?我可以为此写出评论,但那不会很好。

其他语言如何处理此问题:

  • 在C ++中,问题不存在,因为系统包含被<>包围,而项目相对包含被""包围。

  • 问题的C#解决方案是可以在没有任何import语句的情况下访问当前项目中任何文件中定义的功能。

修改:我发现a related PEP引入了from . import someModule语法,用于导入项目本地模块。我要尝试一下。但这还不够。对于导入系统模块,我仍然只有通用的import blah语法。

1 个答案:

答案 0 :(得分:1)

在我参与过的几家公司以及我见过的几个开源项目中,这只是通过编写将import语句分成组的惯例来完成的,新行将它们分开。

这些组始终按此顺序排列:核心库导入,然后是第三方导入,然后是第一方导入。

所以分组的例子是这样的:

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%清楚这些模块来自同一个包。