09 模块导入规则 寻找模块 常见问题

news/2024/11/17 17:27:44/文章来源:https://www.cnblogs.com/jhchena/p/18436962

模块导入规则

在python内部导入模块时,必须要遵循他的规则,必须去指定的目录中找py文件。

寻找模块一般就三个位置
  • 优先在当前运行脚本的同级目录 【一般问题比较多】

  • python的安装目录 【内置模块】

  • python的安装目录+site-packages 【第三方模块】没有的使用 pip install ? 进行安装

  • 当前运行脚本的同级目录 常见问题

问题1 同名

在当前目录下不要出现与内置模块相同名字模块,如果出现会优先在同级目录下面查找到后,不会在去其他路径进行查找。

问题2:执行主程序

优先在当前运行脚本的同级目录

问题3:Pycharm 自动添加 sys.path

下面场景能导入成功,是因为 pycharm 自动添加 sys.path 导入成功,终端正常不能导入成功

问题4:sys.path 有关
1、在项目根目录,在pycharm可以导入成功,出了pycharm不能导入成功
2、如果在方法在其他目录,在需要导的当前目录不能导入成功
3、当弄不清楚时,就使用sys.path查看下当前查找的目录结构

主动添加sys.path

导入模块时,都是根据sys.path中的目录进行py文件的查找

把当前的项目目录,使用sys.path.append() #添加进去 此方法比较死板,通过下面方法进行优化

建议使用下面方式进行添加:当前项目目录

import osdir_path = os.path.abspath(os.path.abspath(os.path.abspath(__file__)))
sys.path.append(dir_path)

#可以通过下面方式进行查看当前导入模块路径
import sysfor item in sys.path:print(item)"""
D:\dev\python_learn\appSpriderWupeiqi\.venv\Scripts\python.exe D:\dev\python_learn\appSpriderWupeiqi\作用汇总-常用代码\查看导入规则路径-sys.path.py 
D:\dev\python_learn\appSpriderWupeiqi\作用汇总-常用代码
D:\dev\python_learn\appSpriderWupeiqi
D:\dev\python\PyCharm 2023.1.1\plugins\python\helpers\pycharm_display
C:\Python311\python311.zip
C:\Python311\DLLs
C:\Python311\Lib
C:\Python311
D:\dev\python_learn\appSpriderWupeiqi\.venv
D:\dev\python_learn\appSpriderWupeiqi\.venv\Lib\site-packages
D:\dev\python\PyCharm 2023.1.1\plugins\python\helpers\pycharm_matplotlib_backend
"""

相对导入与绝对导入

import db 
import utils.my
from utils import my 
from utils import encryty

同级目录,可以使用绝对路径或者相对路径进行导入,

from .. sqlite import b 其中 .表示当前目录,.. 表示当前目录的上一级目录下面sqlite目录下面的子方法#根目录下面导入时,不能使用相对路径导入

一般情况下

  • 主程序导入其他模块时,一般都是绝对导入。

  • 本身代码在文件夹内,又要导入自己文件夹内的一些其他的Py文件,可以使用【绝对】+【相对】

不相关的模块 【绝对导入】
相关的模块  【相对导入】

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WiFi基础(五):802.11帧结构与WiFi控制帧、管理帧、数据帧

802.11 无线 WiFi 有 数据帧,管理帧、控制帧 三种类型帧。这些帧由 9 个部分组成:Frame Control,Duration ID,Address1,Address2,Address3,Seq-ctl,Address4,Frame Body,FCS。需要注意的是,有些组成部分在有些帧里并不是必须的。liwen01 2024.09.22 前言 前面介绍了…

第15课

おきます つくります うります 知ります

产品架构图怎么做才能抓住眼球

产品架构图怎么做才能抓住眼球,即使应用在可视化大屏也不枯燥

02 使用配置文件+反射实现

使用配置文件+反射实现需要遵守:开放封闭原则开放,针对配置开放 封闭,针对功能代码目录结构 unicom- app.py- settings.py- utils - sms.py- wechat.py#seetings.py里面代码 MESSAGE_LIST =["utils.sms.send","utils.wechat.send" ] #sms.py def send(m…

读数据湖仓02数据抽象

数据抽象1. 不同类型的数据 1.1. 不同类型的数据在存储方面有各自的特性,这些特性极大地影响了数据在数据湖仓中的存储和使用方式 1.2. 结构化数据1.2.1. 在企业等组织中,只有少量的数据是结构化数据1.2.2. 结构化数据是基于事务的数据,是组织日常业务的副产品1.3. 文本数据…

结对项目-实现一个自动生成小学四则运算题目的命令行程序

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里 结对项目 - 作业 - 计科22级34班 - 班级博客 - 博客园 (cnblogs.com)这个作业的目标 实现一个自动生成小学四则运算题目的命令行程序成员 3122004742 李思危3122004754 许佳钒github…

Paper Reading: Imbalanced ensemble learning leveraging a novel data-level diversity metric

为了解决基于现有多样性度量的学习复杂性较高的问题,本文提出了一种新的数据级多样性度量 IED。它能够直接基于训练数据集度量多样性,而不需要训练分类器,同时本文也设计了两种基于最优实例配对和贪婪实例配对的 IED 计算方法。在此基础上,本文设计了一种不平衡集成学习模型…

Git 分支本质及与 commit、HEAD、tag 的关系

基于: Git - Git 是什么? Git - 分支简介 Git - 打标签快照 在介绍 Git 分支前,需要知道什么是 commit 对象,介绍 commit 对象前,需要先了解 Git 保存数据的方式。Git 直接记录快照,而非差异比较。 从概念上来说,其它大部分版本控制系统(包括 Subversion 和近似工具)以…

深度讲解-互联网算法备案指南和教程

随着人工智能和大数据技术的迅猛发展,互联网算法在内容推荐、用户画像、智能客服等领域发挥着越来越重要的作用。然而,算法的广泛应用也带来了潜在的安全风险和合规挑战。为了规范互联网算法的开发与应用,国家互联网信息办公室等相关部门发布了《互联网算法备案管理规定》,…

Git 分支本质及与 commit、HEAD、tag 之间的关系

基于: Git - Git 是什么? Git - 分支简介 Git - 打标签快照 在介绍 Git 分支前,需要知道什么是 commit 对象,介绍 commit 对象前,需要先了解 Git 保存数据的方式。Git 直接记录快照,而非差异比较。 从概念上来说,其它大部分版本控制系统(包括 Subversion 和近似工具)以…

k8s 分布式存储平台 -- Longhorn

目录一、什么是 Longhorn二、架构设计1、工作原理2、工作流程3、基于微服务设计的优势三、安装1、安装要求2、使用 Longhorn 命令行工具(验证方式一)3、使用环境检查脚本(验证方式之二)3.1、安装 jq3.2、运行脚本4、安装 open-iscsi4.1、SUSE 和 openSUSE4.2、Debian 和 Ub…

全网最适合入门的面向对象编程教程:53 Python 字符串与序列化-字符串与字符编码

在 Python 中,字符串是文本的表示,默认使用 Unicode 编码,这允许你处理各种字符集,字符编码是将字符转换为字节的规则,常见的编码包括UTF-8、UTF-16和ASCII。全网最适合入门的面向对象编程教程:53 Python 字符串与序列化-字符串与字符编码摘要: 在 Python 中,字符串是文…