python搜索模块的路径 - vip共享吧
  • 网站首页
  • IT技术笔记
    • Java教程
    • MySql数据库
    • PHP开发
    • Python教程
    • JavaScript
    • SEO优化
    • 常用工具
  • 好资源福利
    • 会员账号共享
  • 网站模板源码
    • 小程序源码
    • 网站源码
  • 共享网络资源
  • 更多功能
    • 留言吐槽
    • 文章归档
    • 我的邻居
    • 史上今日
    • 视频解析
    • 高清壁纸
    • 公告动态
    • 广告合作
    • 关于我们


导航菜单
  • 网站首页
  • IT技术笔记
    • Java教程
    • MySql数据库
    • PHP开发
    • Python教程
    • JavaScript
    • SEO优化
    • 常用工具
  • 好资源福利
    • 会员账号共享
  • 网站模板源码
    • 小程序源码
    • 网站源码
  • 共享网络资源
  • 更多功能
    • 留言吐槽
    • 文章归档
    • 我的邻居
    • 史上今日
    • 视频解析
    • 高清壁纸
    • 公告动态
    • 广告合作
    • 关于我们
Python

python搜索模块的路径

2024/9/5 韩俊  Python教程 513 0

我们上一节学习如何自定义模块,无论是自定义模块还是内建模块还是第三方模块都是模块,他们的导入方法都是一样的,唯一的区别只是在于他们所在的路径不同。

模块路径搜索规则

大家注意:下面在描述中,我们为了表达方便,把被导入的包,模块,函数,类等等统称为模块, 在导入模块(自定义模块,内建模块,第三方模块具有一样的路径搜索规则)时,不管在程序中执行了多少次 import,该模块只会被导入一次。 这样可以防止程序重复导入模块,节省内存和计算资源。那么,当使用 import... 语句的时候,Python 解释器是怎样找到对应的模块呢,Python 会根据 sys.path 的设置,按顺序搜索模块,我们可以打印出 sys.path。

'''
hello.py 文件。
'''
import mytools                       # mytools 包在 sys.path 列表中的路径下
from mytools import myabs            # 先找到 mytools 包,再从 mytools 包下找到 myabs 模块
from mytools.myabs import myabsfunc  # 先找到 mytools 包,再从 mytools 包下找到 myabs 模块,再从 myabs 模块里找到 myabsfunc 函数
import sys  # 内建模块 sys,该模块在 sys.path 列表中的路径下

print(sys.path)

我们在 hello.py 文件中打印出了 sys.path 的路径,也就是说我们在该文件中引用的模块必须在这些路径下(直接或通过 from...间接找到),否则就找不到模块。 上面的三种导入方法 import mytools,from mytools import myabs,from mytools.myabs import myabsfunc 对于 import 导入的模块,我们总是能直接或间接(通过 from...)找到,所以我们在 hello.py 中可以找到我们导入的模块。

但是我们在项目开发过程中有时候,我们的模块所放在的位置有时候并不在 sys.path 列表中,那我们如何导入该模块呢,比如我们不想通过 mytools 间接导入 myabs 模块,我们想直接通过 import 导入 myabs 模块,我们只需要把 myabs 模块所在目录加入到 sys.path 列表中即可。

'''
hello.py 文件。
'''
import sys
sys.path.append("E:\\python_one\\mytools")  # 添加字符串 "E:\\python_one\\mytools" 到 sys.path 中
print(sys.path)

import myabs  # 直接导入 myabs 模块
print(myabs.myabsfunc(-250))

用绝对路径的方式在项目开发过程中一般是不允许的,比如我们在本机上开发,项目完成后上传到服务器上, 项目程序所在服务器的盘符和我们本机的盘符不是一个名称(比如我们开发的时候把项目放在本机的 E 盘,而服务器上项目在 C 盘),大家可能会想,我们开放的时候保持和服务器盘符一样不就可以了吗,那如果我们的服务器是 linux 呢?linux 系统没有盘符的概念。我们使用相对路径是解决以上问题最好的方法。

'''
hello.py 文件。
'''
import sys
import os
thisfilepath = os.path.abspath(__file__)            # hello.py 文件全路径
thisfiledir = os.path.dirname(thisfilepath)         # hello.py 所在文件夹全路径
mytoolspath = os.path.join(thisfiledir, "mytools")  # mytools 文件夹全路径

sys.path.append(mytoolspath)  # 添加 mytoolspath 所在全路径到 sys.path 中
print(sys.path)

import myabs  # 直接导入 myabs 模块
print(myabs.myabsfunc(-250))

模块路径搜索注意事项

在我们导入模块的时候,有可能出现模块名字重名的情况,大家可能会想,我们约定好给模块起名字不重名不就可以了吗, 但是一个项目中的模块不可能是一个码农写的,总会有这种可能性;还有我们模块名也有可能和内建模块重名;也有 可能和第三方模块重名,这些可能性都有,所以我们要清楚当模块重名的情况下,Python 会按照 sys.path 列表的顺序查找的,当第一次查到后,就不会再继续查找该模块。假定我们创建一个模块 abs 和内建模块重名,我们本意是调用 Python 内置的 abs 函数做绝对值计算,但是 Python 根据 sys.path 列表里面的值,率先找到我们自己写的 abs 模块,就停止了搜索。

'''
hello.py 文件。
'''
import abs
print(abs(9))  # 这时候用的是我们自己模块 abs 而不是 Python 内置的 abs 函数,所以报错。

我们自定义的模块一般放在项目目录下,这是一个好的习惯;内置模块我们安装 Python 解释器的时候,Python 把它放在安装目录下了;第三方模块我们一般自动安装在 Python 安装目录下的 lib 目录下的 site-packages 目录下。

本节重要知识点

弄明白模块搜索路径的规则。

自定义模块的写法规范。

点赞:0 分享

上一篇
php中$this、static、final、const、self 等几个关键字的用法
下一篇
Python自定义模块
作者头像 作者名称 作者性别
韩俊

热门推荐

1 python的定制类
2 python argparse用法总结
3 Python多重继承
4 Python3生成器
5 Python3初级运算符
6 《Python编程从入门到精通》由浅入深地讲解Python语言开发

评论列表

取消回复

    •  
      Login

      韩俊

      趁你现在还有时间,尽你自己最大的努力,努力做成你最想做的那件事,成为你最想成为的那种人,过着你最想过的那种生活。这个世界永远比你想的要更精彩,不要败给生活。

      退出登陆
      • 10072文章
      • 455评论
      • 80微语
  • 广告赞助

  • 二零二五年05月
    一二三四五六日
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
  • 分类

    • 网站模板源码
    • IT技术笔记
    • 好资源分享
    • 共享网络资源
  • 最新文章

      • 迷雾通:免费使用的VPN软件
        • 任推邦:打造你的赚钱新途径!
          • 任推邦是正规平台吗?任推邦邀请码多少?
            • 京东外卖商户入驻指南及详细入驻攻略
              • git教程及git常用命令指南
                • 女神过生日简短祝福语
                  • 三八祝福语简短优雅点
                    • 事业女性三八祝福语简短
  • 热门文章

    • 酷狗音乐VIP账号 酷狗音乐会员账号共享2017.01.29更新
    • 芒果tv vip会员账号 芒果tv会员账号共享2017.01.29更新
    • 爱奇艺vip账号 爱奇艺/PPS会员账号共享2016.12.12更新
    • 优酷/土豆vip会员账号 优酷会员账号共享2017.01.29更新
    • 活动:免费获得爱奇艺VIP/PPS会员账号50天以上的使用权!
    • 酷我音乐VIP账号 酷我音乐会员账号共享2016.12.31更新
    • 暴风影音会员账号 暴风影音会员账号共享2016.12.31更新
    • m1905会员账号 m1905会员账号共享2016.10.21更新
  • 最新评论

    • https://www.vipshare8.com/content/templates/meta/Static/images/tx/10.jpg

      你丫的 文章写得太好了 支持下!![F3...

    • https://www.vipshare8.com/content/templates/meta/Static/images/avatar.jpg

      很棒!刚在某网站看到这个,很欣赏,可惜下...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=3861064027

      呃呃呃 oooo

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了111:根据激活的时间有一年的有效期!

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=792480561

      到2025就到期了吗?

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      [blockquote]打卡时间:16:...

    • https://www.vipshare8.com/content/templates/meta/Static/images/tx/7.jpg

      俊哥,想借用迅雷一用!但需要手机验证!看...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=3293901900

      感谢大大的分享

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了好奥v:如果没有解析成功,可以切换接口...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=131241242441

      现在视频解析网站怎么用不了啦?

  • 网站统计 I 当前在线:269人

    • 本站管理:1位
    • 用户总数:591位
    • 置顶文章:2篇
    • 日志总数:10072篇
    • 微语总数:80条
    • 评论总数:455条
    • 标签总数:83条
    • 页面总数:8页
    • 分类总数:14个
    • 链接总数:16条
    • 运行天数:3674天
    • 最后更新:4月27日
    • 登录
    • 注册
    • 找回
    Copyright © 2025vip共享吧网站地图 网站备案豫ICP备19004194号-1

    免责声明:本站资源仅供用于学习和交流,本站部分素材内容来源于网络,如有侵权/投稿等,请及时联系站长.

    • 首页
    • 秒懂百科 秒懂百科
    • 搜索
    • 史上今日

    大家都在搜

    • 土豆vip账号
    • qq音乐会员共享
    • 爱奇艺VIP账号共享
    • nginx
    • 爱奇艺vip账号
    • 好省
    • 优酷账号共享
    • chatGPT
    • 酷狗会员账号共享
    • m1905会员账号
    • redis
    • 手机赚钱软件
    • 芒果视频
    • 优酷vip账号共享
    • 酷狗VIP账号
    • 设计素材
    • 
    • 