python - 如何查找给定的python导入语句是内部的还是外部的?
问题描述
我有一个包含数千个导入语句的 Excel 表。例如。,
from XYZ.loghelper import LogHelper,
import os,
from models import CustomUser, VerticalApp,
from django.http import HttpResponse,
其中一些是内置的,一些是用户定义的。现在我必须找出它们是用户定义的还是内置的。
我怎样才能做到这一点?
解决方案
我假设内置的意思是“Python 的 stdlib 的一部分”(python 的“内置”功能,“内置”,根本不需要导入)。“用户定义”的定义更加模糊 - 是像 Django“内置”或“用户定义”这样的第 3 部分包?
但无论如何:简短的回答是,从技术上讲,您不能仅从导入语句中分辨出来。查找sys.path
模块并选择第一个匹配的模块,因此如果您在 Python 安装的 stdlib 目录之前的本地目录中有一个名为“os.py”的模块,sys.path
那么“import os”确实会导入您自己的“ os.py" 模块而不是标准库的模块。IOW,您需要使用完全相同的环境,导入模块,并检查模块的__file__
属性以找出它是从哪里导入的。
现在大多数 python 开发人员都试图避免隐藏 stdlib 的模块名称(出于显而易见的原因),因此您也可以构建set
Python 的 stdlibs 模块名称的列表(从技术上讲,您想要一个更好的性能,但无论如何),解析您的导入语句,并检查是否要导入的模块的名称属于标准库名称的集合。在大多数情况下,这应该会产生正确的结果,但不能保证 100% 准确。
推荐阅读
- postgresql - 如何在 PostgreSQL 中合并表?
- cucumber - Karate test framework: Only one assert using Examples
- python - 消息框 tkinter 的问题
- angular - Mat-Dialog 中的 Mat-Table 未更新
- bash - 使用 shell 脚本将输出划分为多个变量
- c++ - 为双向量保留空间
- qt - Qt mdi 窗口不接收鼠标事件
- python - 如何使用 Torch 框架从训练日志中绘制损失图
- php - 在 Craft 3 中从模板传递到自定义模板标签时,如何遍历标签字段?
- python - 使用 Oanda 问题实现外汇交易算法