首页 > 解决方案 > 如何查找给定的python导入语句是内部的还是外部的?

问题描述

我有一个包含数千个导入语句的 Excel 表。例如。,

from XYZ.loghelper import LogHelper,
import os,
from models import CustomUser, VerticalApp,
from django.http import HttpResponse,

其中一些是内置的,一些是用户定义的。现在我必须找出它们是用户定义的还是内置的。

我怎样才能做到这一点?

标签: pythonpython-2.7

解决方案


我假设内置的意思是“Python 的 stdlib 的一部分”(python 的“内置”功能,“内置”,根本不需要导入)。“用户定义”的定义更加模糊 - 是像 Django“内置”或“用户定义”这样的第 3 部分包?

但无论如何:简短的回答是,从技术上讲,您不能仅从导入语句中分辨出来。查找sys.path模块并选择第一个匹配的模块,因此如果您在 Python 安装的 stdlib 目录之前的本地目录中有一个名为“os.py”的模块,sys.path那么“import os”确实会导入您自己的“ os.py" 模块而不是标准库的模块。IOW,您需要使用完全相同的环境,导入模块,并检查模块的__file__属性以找出它是从哪里导入的。

现在大多数 python 开发人员都试图避免隐藏 stdlib 的模块名称(出于显而易见的原因),因此您也可以构建setPython 的 stdlibs 模块名称的列表(从技术上讲,您想要一个更好的性能,但无论如何),解析您的导入语句,并检查是否要导入的模块的名称属于标准库名称的集合。在大多数情况下,这应该会产生正确的结果,但不能保证 100% 准确。


推荐阅读