python - 区分本地导入和系统导入

标签 python python-import

我刚刚写了这段代码:

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

关于python - 区分本地导入和系统导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38464054/

相关文章:

python - 如何在 Python 中拆分字符串?

python - 如何从 Anaconda Tensorflow 环境启动 Spyder?

python - 使用 conda install 安装 Keras 包

python - 如何让 youtube-dl 支持非 ASCII 字符?

python - 处理日志以修复格式错误的 IP 地址 ?.?.?.x

python - Matplotlib Legend 的问题

Python 模块在 bash 中返回错误,但不在 IDLE 中返回错误

python - 如何将 "reimport"模块转换为 python,然后在导入后更改代码

Python - 导入错误 : No module named foo. 栏

python - 配置独立的小部件(Tkinter ttk、Python)