import机制浅析

news2025/1/18 6:06:39

文章目录

          • import机制
            • 入口文件
          • 绝对导入和相对导入
            • 绝对导入
            • 相对导入
            • 解决import报错问题
          • 小结

import机制

​ 在我们执行python文件时,python通过sys.path进行路径搜索的,整体来说,分为三种搜索模式

1.#系统的内置模块进行搜索; exp:os、sys模块
2.#环境变量的路径; exp:pip install 安装的包
3.#入口文件所在的目录;exp:我们直接使用python xxx.py的文件即为入口文件
入口文件

​ 值得一说的是我们的入口文件,因为像内置和环境变量在导入过程中大家都比较熟悉,

一般情况下,我们直接使用python运行的文件就是我们的入口文件,一般使用main方法进行标识

#使用内置__name__方法进行获取文件是否为入口
if __name__ == '__main__':
    main()

​ 入口文件一般具有一个特点就是目录层级为顶层的,不低于任何模块或者包,这样是为了在运行时,sys.path检测到的目录为最顶层,防止出现导入过程中无法找到包的问题。

常见目录结构如下:

#其中run.py作为入口文件
├── package
│   ├──__init__.py
│   ├── sub_1
│   │   ├── __init__.py
│     │     ├── module1.py
│   │   └── module2.py
│   └── sub_2
│       ├── __init__.py
│       └── module3.py
└── run.py
绝对导入和相对导入

​ 在python中绝对导入和相对导入都有一个参考值,其中绝对导入是参考的项目根目录,我们的相对导入参考的是运行模块所在的目录

绝对导入

​ 让我们从一个报错开始我们的绝对导入的讲解吧,我们知道使用绝对导入参考是根目录,创建如下对应的目录使用,cmd窗口运行
在这里插入图片描述

​ 使用cmd运行提示No module named “test3”,我们查看机制可以发现我们遵循的是test1.py这个入口文件所在的目录进行导入,从上图可以看出test1文件属于package,在package中并不存在test3.py;

实例证明:

#test1.py
import sys
print (sys.path)
#############输出结果#############
['C:\\Users\\x-149\\Desktop\\hahaha\\packge', 
 'C:\\Users\\x-149\\AppData\\Python\\Python38\\lib\\site-packages']

从结果可以看出上述的说明我们在使用绝对路径时一定要把项目的根目录加入在我们的path路径中,防止出现一些未知的问题

相对导入

​ 相对导入指的是相对当前路径进行导入
在这里插入图片描述

同级(package)进行导入报错no know parent package,可见这种写法是bad正确的相对导入应该是

在这里插入图片描述

相对于当前运行的目录的一个运行当然,如果我们想导入test2.py文件使用

在这里插入图片描述

也会报错no know parent package

小结:使用相对导入是相对入口文件(顶级模块)所在目录下的子模块以及子包的导入

解决import报错问题

​ 手动给\Lib\site-packages文件夹中建立一个.pth文件,内容为自己写的库绝对路径,这样就相当于添加了根目录

小结

​ from import如果采用相对导入会出现各种导入出现异常问题,所以我们在库的导入过程中一般采用绝对路径的导入方式,简单直接方便,如果有些目录导入比较麻烦,可以将目录添加至根目录方便索引位置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于PHP+MySQL大学教学工作网络平台的设计与实现

随着在校学生人数的不断增加,学生的数量也在不断的增加,同时面临的就是如何更加方便快捷和高效的管理学生的大学教学工作信息,传统模式的大学教学工作管理明显已经不能够满足当下的需求,于是我们提出了大学教学工作系统的设计与开发。 本课题基于PHP,在Windows7系统的环境下,利…

基于模态凝聚算法的特征系统实现算法的自然激励技术(Matlab代码实现)

🎉🎉🎉🎉欢迎您的到来😊😊😊 🥬博客主页:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 📝床头铭:将来的我一定会感谢…

(万字详解)MySQL增删改查(基础+进阶)

目录 🐳今日良言:眼里有不朽的光芒 心里有永恒的希望 🐕一、MySQL增删改查(基础) 🐂1.初识CURD 🐍2.使用CURD 🐇二、MySQL增删改查(进阶) 🐝1.数据库约束 🐑2.表的设计 🐭3.…

面向切面编程的一些概念

横切关注点 散播应用中多处的功能被称为横切关注点 安全就是一个关注点,每个方法或者类都需要注重安全方法参数日志记录也是一个关注点以及事务管理 横切关注点从概念上讲是与业务分离的,但往往会直接嵌入到业务中 多个类使用到相同的功能。最常见到的就…

【C++面向对象程序设计】CH5 继承与派生

目录 前言 一、继承与派生的概念 二、派生类的声明方式 1.格式 2.【例】假定已经声明一个基类student,在它基础上通过单继承建立一个派生类student1。 三、派生类的构成 四、派生类成员的访问属性 前言 1.公有继承 (1)公有基类在派…

r、 weka从决策树模型看员工为什么离职?

马云说:“员工离职的原因总是只有两个:钱,没有到位;心委屈了。” 现在很多老板都抱怨说,年轻人的流动率太高了,员工觉得老板的钱太少了,最后还是多指责。 最近我们被客户要求撰写关于员工离职的研究报告&…

黄佳《零基础学机器学习》chap2笔记

黄佳 《零基础学机器学习》 chap2笔记 第2课 数学和Python基础知识 文章目录黄佳 《零基础学机器学习》 chap2笔记第2课 数学和Python基础知识2.1 函数描述了事物间的关系机器学习中常用的一些函数2.2 捕捉函数的变化趋势2.3 梯度下降2.4 机器学习的数据结构--张量2.4.1 张量的…

Mysql5.7 基于Docker搭建主从复制集群

基础 参考:mysql5.7-Docker-安装-备份 拉取镜像 docker pull mysql:5.7 创建目录 mkdir /home/liangshijie/mysql-docker-file/conf mkdir /home/liangshijie/mysql-docker-file/logs mkdir /home/liangshijie/mysql-docker-file/data创建配置文件 cd /home…

GEE Python本地快速下载GEE数据(比网页版保存到网盘再下载快几十倍,尤其是在下载几十年的长时间系列数据时,速度提升更加明显)

前言 可根据研究区直接裁剪数据以及进行一些计算处理后再下载,GEE成为了大家下载数据的重要途径,然而直接通过官网网页将数据先保存到网盘再下载的下载方法速度太慢,新号速度还好,越用速度越来越慢,本文提供了一种直接…

IBM MQ通道接收端绑定步骤

不同类型的绑定 IBM MQ 支持应用程序可以连接的两种方式: 1.本地绑定:这是当应用程序和队列管理器在同一个操作映像上时。 CHLAUTH 与此类应用程序连接无关。 2. 客户端绑定:这是应用程序和队列管理器使用网络进行通信的时候。 应用程序和队列…

从Opencv之图像直方图源码,探讨高性能计算设计思想

前言 纸上得来终觉浅,绝知此事要躬行。学会算法的理论很重要,但是把理论高效的实现也是需要一点点练习的。 图像直方图的理论很简单,就是把一个图像的像素区间划分为几个子区间,然后统计图像中的像素包含在子区间内的个数。这里&a…

什么是网络变压器,它是干什么用的?作用/参数表/价格及型号体系有哪些?怎么测量网络变压器好坏

什么是网络变压器? 网络变压器是在以太网网络传输设备中,主板上芯片PHY与网口RJ45之间的一个黑黑的小方块,里面的结构是磁环及铜线组成,这个小方块就是我们俗称的网络变压器 有的变压器中心抽头接到地。而接电源时,电…

深度学习入门(五十七)循环神经网络——循环神经网络从零开始实现

深度学习入门(五十七)循环神经网络——循环神经网络从零开始实现前言循环神经网络——循环神经网络从零开始实现教材1 独热编码(one-hot)2 初始化模型参数3 循环神经网络模型4 预测5 梯度裁剪6 训练7 小结前言 核心内容来自博客链接1博客连接2希望大家多…

【Hack The Box】linux练习-- Pandora

HTB 学习笔记 【Hack The Box】linux练习-- Pandora 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月27日🌴 &#x1f…

TensorFlow之文本分类算法-4

1 前言 2 收集数据 3 探索数据 4 选择模型 5 准备数据 6 模型-构建训练评估 机器学习主要包括模型构建、模型训练、模型评估,在选择模型章节中已经对如何根据S/W的比率进行模型的选择,其包括n-gram模型或者序列模型,本章节内容主要描述…

LeetCode-813-最大平均值和的分组

1、动态规划法 我们可以利用数组dp[i][j]dp[i][j]dp[i][j]来表示我们将数组中区间[0,i−1][0,i-1][0,i−1]的元素分为jjj组的平均值的总和。因此我们可以得到状态转化方程如下:{dp[i][j]∑r0i−1nums[r]i,j1dp[i][j]maxx≥j−1(dp[x][j−1]∑rxi−1nums[r]i−x),j&…

计算机五大部件是指什么

计算机五大部件: 计算机硬件系统由运算器、控制器、存储器(内外存储器)、输入设备和输出设备五部分组成。 1、控制器:控制器就是一个系统中枢,控制计算机如何运行、运转的基本单元。 每一个运算器都需一个单独的控制…

D-016 JTAG硬件电路设计

JTAG硬件电路设计1 简介1.1 JTAG分类1.2 ARM调试器2 设计要点3 电路实战3.1 Xilinx3.2 ALTERA ------USB blaster1 简介 JTAG(Join Test Action Group)的中文名称为联合测试工作组,是一种国际标准测试协议,主要用于芯片内部测试:验证设计和P…

Ubuntu16.04 完整版 Gym 安装及说明

Ubuntu16.04 完整版 Gym 安装及说明1. 安装前言2. Gym 开发环境说明3. 完整版 Gym 的安装3.1 Anaconda 创建虚拟环境3.2 安装 gym[box2d]3.2.1 采用官方 GitHub 教程进行安装的报错及解决方案3.2.2 采用 Anaconda 进行安装3.2.3 测试能否成功运行 LunarLander-v2 环境3.3 安装 …

【一文秒懂——YAML配置文件】

目录 1. YAML配置文件 2. 实例 2.1 将原application.properties改为application.yml: 2.2 将原application-dev.properties改为application-dev.yml: 1. YAML配置文件 在Spring Boot项目中,还可以使用YAML配置文件,这是一种使…