首页 > 其他分享 >09 模块导入规则 寻找模块 常见问题

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

时间:2024-09-28 08:53:39浏览次数:5  
标签:常见问题 python 09 sys 导入 模块 path 目录

模块导入规则

在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 os

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

#可以通过下面方式进行查看当前导入模块路径
import sys

for 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文件,可以使用【绝对】+【相对】

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

标签:常见问题,python,09,sys,导入,模块,path,目录
From: https://www.cnblogs.com/jhchena/p/18436962

相关文章

  • 19 导入模块成员冲突 总结
    成员和冲突#如果导入的方法存在冲突时,进行取别名importdbasd1fromutils.dbimportdbasd2#也支持下面的方法导入fromutils.dbimportx1,x3,x3fromutils.dbimport*#此方式不推荐defrun():d1.f1()d1.f2()d2.xxx()if__name__=="__main__":......
  • python requests模块学习
    1、模块介绍Pythonrequests是一个常用的HTTP请求库,可以方便地向网站发送HTTP请求,并获取响应结果。2、get请求示例#导入requests包importrequests#发送请求x=requests.get('https://www.run.com/')#返回http的状态码print(x.status_code)#获取响应......
  • Lenovo SR850服务器亮黄灯维修和升级CPU扩展模块
    佛山市三水区某高校1台LenovoThinksystemSR850服务器黄灯故障到现场检修和升级3号和4号CPU。加强服务器的计算性能;故障情况是该学校it管理员这一天看到这台SR850服务器前面板亮了一个黄灯,但是目前系统运行正常,出于安全考虑,工程师跟用户协商先通过远程的方式进服务器的X......
  • 【2024.09.27】NOIP2024 赛前集训-刷题训练(3)
    【2024.09.27】NOIP2024赛前集训-刷题训练(3)「NOIP2018提高组」铺设道路算法一:模拟正常人铺路的过程,每次找区间的最小值,最小值就是本次填的高度,由于出现了若干个0位置,就分裂成若干个子区间去重复上述过程,直到全部变成0。时间复杂度\(O(nlogn)\),瓶颈在预处理st表。算法二:若......
  • 标准库之 datetime和time 模块
    一、time模块time模块是Python标准库中最基础、最常用的模块之一。它提供了各种处理时间的方法和函数,如获取当前时间、格式化时间、计算时间差等。time模块大部分函数的底层实现是C语言库的时间处理函数。1.1、获取时间相关函数1.1.1、time.time()函数时间戳是指格林威治时......
  • Excel读写之xlrd模块
    1.1、xlrd模块介绍xlrd:用于读取Excle数据文件将返回的数据对象放到内存中,然后查询数据文件对象的相关信息。xlwt:用于在内存中生成新的数据文件对象,处理完成后写入到Excel数据文件中。xlutils:主要的作用就是copy新的文件对象,在新的数据对象中完成数据处理操作。注意:在使用xlrd......
  • 20240927 随机训练
    GYM105350E题目描述给定一个大小为\(N\)的数组\(A\)。我们定义一个大小为\(N\)的数组\(B\)是有效的当且仅当:对于\(\forall1\lei\leN,1\leB_i\leN\),如果从\(B\)中移除\(B_i\),则数组\(B\)恰好有\(A_i\)个不同的数。求有多少个不同的由有效数组\(B\)......
  • 20240927
    FunisCounting我们可以发现数组\(a\)必须是\(x\)或\(x-1\),然后分类讨论即可#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e6+5,mod=998244353;intinv[N],f[N],g[N],t,n,a[N];intC(inta,intb){if(......
  • SQLite3模块使用详解
    SQLite3是一种轻量级的数据库引擎,它不需要独立的服务器进程,可以直接读写磁盘上的数据库文件。由于其简单易用和高效的特性,SQLite3成为了许多应用程序和开发者在开发阶段的首选数据库。Python的sqlite3模块提供了对SQLite3数据库的直接支持,允许开发者在Python环境中轻松地......
  • LMZ23605具备 36V 最高输入电压的 5A SIMPLE SWITCHER®易电源电源模块
    LMZ23605SIMPLESWITCHER®易电源电源模块是一种易于使用的降压直流/直流解决方案,具有驱动高达5A的负载的能力。LMZ223605采用创新封装模式,提高了散热性能,可以手工或机器焊接。LMZ23605可以工作于6V和36V之间的输入电压轨,并提供低至0.8V的可调高精度输出电压。LMZ23605只......