Python sys.path与-m参数的作用

news2024/11/13 8:55:40

文章目录

  • Python sys.path与-m参数的作用
    • sys.path作用
    • 验证
    • 结论

Python sys.path与-m参数的作用

sys.path作用

sys.path‌当试图导入一个模块时,Python解释器会按照sys.path中列出的路径顺序搜索对应的模块文件。

sys.path的组成包括当前目录(即包含你当前运行脚本的目录)

PYTHONPATH环境变量中列出的路径

Python标准库的路径,以及其他安装的第三方库的路径

通过修改sys.path,可以控制Python解释器搜索模块的顺序,这对于动态添加或修改模块搜索路径非常有用。

验证

创建一个目录层级方便导包测试,以下是创建的目录结构

[ldsx@master ]$ tree python_code/
python_code/
└── src_code
    ├── ldsx_cfg
    │   ├── test_cfg.py
    │   └── test_mail.py
    ├── ldsx_db
    │   └── test_db.py
    ├── ldsx_utils
    │   └── test_utils.py
    └── test_main.py

在test_main.py中导入包写入一下内容

import sys
import os
import traceback
try:
    from ldsx_cfg.test_cfg import *
except Exception:
    traceback.print_exc()

if __name__ == '__main__':
    print('PATH', sys.path)
    print('PWD', os.getcwd())

使用终端执行

在这里插入图片描述

可见当路径在/home/ldsx/ldsx_code/ldsx_improve/python_code下执行没问题,导入包正常,
sys.pathd第一个元素是src_code这个路径
当前的工作路径为:/home/ldsx/ldsx_code/ldsx_improve/python_code

使用-m参数执行

在这里插入图片描述

当使用 -m模块运行的时候出现了 moduleNotFound,
sys.path第一个元素变成了''
当前的工作路径为:/home/ldsx/ldsx_code/ldsx_improve/python_code

当我们切换路径继续使用-m参数运行

在这里插入图片描述

切换路径到src_code中继续使用模块花运行,运行成功
当前sys.path第一个元素还是''
但是当前的工作路径为:/home/ldsx/ldsx_code/ldsx_improve/python_code/src_code

证明当使用 -m模块执行的时候,sys.ptah的’'为当前的工作路径。

刚才是在test_mian中导入与test_main同层文件夹下的文件,这次使用ldsx_utils文件夹下的test_utils.py导入

ldsx_cfg下的test_cfg.py

#打开test_utils.py写入一下内容
class LdsxFunc():
    pass
    
import sys
import os
import traceback
try:
    from ldsx_cfg.test_cfg import *
except Exception:
    traceback.print_exc()

if __name__ == '__main__':
    print('PATH', sys.path)
    print('PWD', os.getcwd())

在这里插入图片描述

无法找到文件,因为sys.path第一个元素的路径:/home/ldsx/ldsx_code/ldsx_improve/python_code/src_code/ldsx_utils
根本不包含ldsx_cfg这个文件夹所以肯定找不到
在import sys下添加一行
sys.path.append('/home/ldsx/ldsx_code/ldsx_improve/python_code/src_code')
再次执行

在这里插入图片描述

使用-m 模块化执行
删掉sys.path.append('/home/ldsx/ldsx_code/ldsx_improve/python_code/src_code') 

在这里插入图片描述

结论

python导入包的时候会使用sys.path中的路径去寻找包,如果sys.path中的路径,这个路径目录下不包含你要找的包(文件夹)那么导入一定会失败,

当使用-m参数提交,意义就是把你当前的工作目录作为找包路径,在sys.path中体现为第一个元素是’’,

不使用-m参数sys.path会把你执行文件的绝对路径当作找包路径,这就是区别。

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

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

相关文章

二叉树相关练习

二叉树相关oj题: 对称二叉树 解题思路:判断一棵树是否轴对称,先判断左右子树结构是否相同,结构相同的情况下再判断对应的val是否轴对称,判断根节点的左右子树,再判断根节点的左右子树的左右子树是否轴对称…

《潮骚》爱恋的心如海潮般骚动,又如大海般广袤平静

《潮骚》爱恋的心如海潮般骚动,又如大海般广袤平静 三岛由纪夫(1925-1970),日本当代小说家、剧作家、记者、电影制作人和电影演员,右翼分子。主要作品有《金阁寺》《潮骚》《丰饶之海》等。曾3次获诺贝尔文学奖提名,属…

类图的关联关系

类图关联关系分为单向关联关系,双向关联关系,自关联关系 单向关联关系 是一个类的属性或方法被另外一个类引用,二者之间用一个箭头表示 比如顾客类和地址类,每个顾客都有一个地址 单向关联关系在UML图中两个类之间用单向箭头表…

AI绘图提示词/咒语/词缀/关键词使用指南(Stable Diffusion Prompt 最强提示词手册)

一、为什么学习AI绘画关键词 在人工智能技术飞速发展的今天,AI绘画已成为艺术领域的一大热点。学习AI绘画关键词,不仅有助于我们掌握这一新兴技术,还能拓宽我们的创作思路,实现艺术与技术的完美融合。以下是学习AI绘画关键词的几…

基于python的人力资源管理系统/基于django的OA系统的设计与实现

摘 要 随着当今社会的发展,时代的进步,各行各业也在发生着变化,比如人力资源管理这一方面,利用网络已经逐步进入人们的生活。传统的人力资源管理,都是员工去公司查看部门信息、招聘信息,这种传统方式局限性…

C++入门基础知识44——【关于C++ 判断】

成长路上不孤单😊【14后,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊!!!!&#xff…

【MYSQL】5 性能优化

1步骤 2查看系统性能参数 在MySQL中,可以使用 SHOW STATUS 语句查询一些MySQL数据库服务器的 性能参数 、 执行频率 。 SHOW STATUS语句语法如下: SHOW [GLOBAL|SESSION] STATUS LIKE ‘参数’; 一些常用的性能参数如下: • Connections&…

认识人工智能(AI,Artificial Intelligence)

人工智能(AI, Artificial Intelligence)是当今科技领域最引人注目的前沿技术之一。它的影响已渗透到各行各业,从日常生活中的虚拟助手到复杂的工业自动化系统,AI 的应用无处不在。本文将详细探讨人工智能的定义与发展历程、学习人工智能的目的、人工智能在实际生活中的应用…

嵌入式全栈开发学习笔记---Linux系统编程(多线程编程)

目录 多线程 线程(thread)理论 进程和线程的区别(面试重点) 线程的优势(面试重点) 多线程编程pthread 线程的创建pthread_create() 主线程等待子线程可以用pthread_join() 线程退出pthread_exit() …

Code Practice Journal | Day59-60_Graph09 最短路径(待更)

1. Dijkstra 1.1 原理与步骤 步骤: 选取距离源点最近且未被访问过的节点标记该节点为已访问更新未访问节点到源点的距离 1.2 代码实现 以KamaCoder47题为例 题目:47. 参加科学大会(第六期模拟笔试) (kamacoder.com) class Progra…

非开发者也能体验纯血鸿蒙了?15款机型开启鸿蒙NEXT测试招募

非开发者也能体验纯血鸿蒙了?这15款机型正式开启鸿蒙NEXT Beta版测试招募 8月26日,华为发起了新一轮的HarmonyOS NEXT Beta版的升级招募,据了解,此次升级招募面向华为Mate 60系列、华为Mate X5(含典藏版)、…

Linux: make指令与Makefile文件

目录 1. 场景介绍 2. make指令与Makefile文件 3. 依赖关系和依赖方法 4. 项目清理 5. 原理 5.1 识别文件是否需要编译 5.2 make原理 6. 扩展 总结 1. 场景介绍 Linux操作系统中,我们每编写一个C/C代码,都要手动使用gcc/g指令,对代码…

ffmpeg源码分析(六)内存管理

系列文章目录 FFmpeg源码解析系列(一)目录和编译 FFmpeg源码解析系列(二)主要结构体 ffmpeg源码解析系列(四)结构体之AVIOContext 、URLContext、URLProtocol ffmpeg源码解析系列(五&#xff0…

phpstudy怎么用

启动Apache 这是你的默认网站域名。点击物理路径 进入到目录,将你的php文件项目拖进去。如test.php 打开浏览器

python 天气与股票的关系--第2部分,清洗数据

先看一下股票信息 合并天气信息 合并2个数据 合并之后,会自动删除 周六和周日 节假日 下一篇,尝试建立数学模型

生产环境变态开启devtools(redux篇)

前沿 默认都安装了谷歌的redux-devtools插件哦 没有亮,说明关闭了生产环境的redux devtools工具, 接下来跟着博主一起变态启用它 如果看了我上一篇的小伙伴,应该会很熟练了,如果没有看上一篇的,也没关系,博主会手摸手的教你们打开它。 正常的解决方案(适用内部开发人员…

【c++】日期类相关实践:计算日期到天数转换、日期差值

相关文章:日期类(运算符重载应用)详细版 目录 前言 实践1:计算日期到天数转换 题目 方法 关键代码 完整代码 实践2:日期差值 题目 方法 关键代码 完整代码 💗感谢阅读!&#x1f49…

python网络爬虫(四)——实战练习

0.为什么要学习网络爬虫 深度学习一般过程:   收集数据,尤其是有标签、高质量的数据是一件昂贵的工作。   爬虫的过程,就是模仿浏览器的行为,往目标站点发送请求,接收服务器的响应数据,提取需要的信息&#xff0c…

Python 算法交易实验85 QTV200日常推进-钳制指标与交易量

说明 继续保持思考与尝试 最近挺有意思的,碰到很多技术上的问题,其解决方案都类似“阴阳两仪”的概念。 "阴阳两仪"是中国古代哲学中的一个重要概念,源自《易经》(又称《周易》)。它是对宇宙间最基本对立统一…

数据结构与算法 第5天(树和二叉树)

树形结构 一对多 只有一个前驱 可以有多个后继 树的定义 基本术语 有序树:树中结点的各子树从左至右有次序(最左边的为第一个孩子) 森林:是 m(m≥0)棵互不相交的树的集合。 一棵树可以看成特殊的森林 二叉树 每个节点最多有两个…