我刚写了这段代码:
import os
import helpers
我立刻意识到,稍后当我读到这篇文章时,我会想知道helpers
是一个系统模块,还是我已编写并放入项目目录的那个(我不记得那么多! :))
在此代码中明确说明os
是系统模块并且helpers
是我项目的一部分的任何Pythonic方法吗?我可以为此写出评论,但那不会很好。
其他语言如何处理此问题:
在C ++中,问题不存在,因为系统包含被<>
包围,而项目相对包含被""
包围。
问题的C#解决方案是可以在没有任何import语句的情况下访问当前项目中任何文件中定义的功能。
修改:我发现a related PEP引入了from . import someModule
语法,用于导入项目本地模块。我要尝试一下。但这还不够。对于导入系统模块,我仍然只有通用的import blah
语法。
答案 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%清楚这些模块来自同一个包。