python -m 是什么命令

news2024/12/25 12:47:47

python -m 命令是什么意思
首先python --help 可以看到-m的含义:意思是将库中的python模块用作脚本去运行。

python --help 命令显示结果
在这里插入图片描述python -m xxx.py 和python xxx.py 有什么区别
这是两种加载py文件的方式:

叫做直接运行(python xxx.py)
把模块当作脚本来启动(python -m xxx.py)
不同的加载py文件的方式,主要是影响——sys.path 这个属性。sys.path 就相当于liunx中的PATH。

下面来看一下sys.path

import sys
print(sys.path)

#结果
#[' 'D:\\Python\\Python38\\python38.zip', 'D:\\Python\\Python38\\DLLs', 'D:\\Python\\Python38\\lib','D:\\Python\\Python38\\lib\\site-packages']

上面的内容我只截取了一段。此为当前python解释器运行的环境,python解释器会在这些目录下去寻找依赖的库!

下面有两个例子,通过不同方式启动同一文件,sys.path属性的值有何不同。
文件目录为D:\book\img\run.py,在D:\book为当前目录去执行

# run.py 内容如下
import sys
print(sys.path)

直接启动:

python ./img/run.py

[‘D:\book\img’, ‘D:\Python\Python38\python38.zip’, ‘D:\Python\Python38\DLLs’, ‘D:\Python\Python38\lib’, …]

以模块启动

python -m img.run

[‘D:\book’, ‘D:\Python\Python38\python38.zip’, ‘D:\Python\Python38\DLLs’, ‘D:\Python\Python38\lib’,…]

细心的同学会发现,在第一行有所不同。
直接启动是把run.py文件,所在的目录放到了sys.path属性中。
模块启动是把你输入命令的目录(也就是当前路径),放到了sys.path属性中,

这个特性有什么用呢

# 目录结构如下
p1/
    __init__.py
    m.py
p2/
    __init__.py
    run.py
# run.py 内容如下
import sys
from p1 import m
print(sys.path)

如何才能启动run.py文件?
直接启动(失败)

>>>python p2/run.py
#ImportError: No module named package

以模块方式启动(成功)

>>>python -m p2.run

当需要启动的py文件引用了一个模块。你需要注意:在启动的时候需要考虑sys.path中有没有你import的模块的路径!
这个时候,到底是使用直接启动,还是以模块的启动?目的就是把import的那个模块的路径放到sys.path中。

明白了吗?
官方文档参考

导入一个叫 mod的模块时,解释器先在当前目录中搜索名为 m.py 的文件。如果没有找到的话,接着会到 sys.path 变量中给出的目录列表中查找。 sys.path 变量的初始值来自如下:

1.输入脚本的目录(当前目录)。
2.环境变量 PYTHONPATH 表示的目录列表中搜索(这和 shell 变量 PATH 具有一样的语法,即一系列目录名的列表)。
3.Python 默认安装路径中搜索。
实际上,解释器由 sys.path 变量指定的路径目录搜索模块,该变量初始化时默认包含了输入脚本(或者当前目录), PYTHONPATH 和安装目录。这样就允许 Python程序了解如何修改或替换模块搜索目录。
容易出错的地方
新同学在使用使用python -m xxx.py出现Error while finding module specification for ‘xxx.py’ (ModuleNotFoundError: path attribute no…
如上面的命令所示,Python -m指的是把这个.py文件当做模块运行,但如果你一不小心加了.py这个后缀,就会出这个错误。解决也很简单,要么把"-m"删除,要么删除".py"后缀,问题就迎刃而解了

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

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

相关文章

Android 音频可视化:频谱特效的探索与实践

音频可视化,一言以蔽之,就是声音到图像的转换。 随着视觉工业时代的到来,用户逐渐重视产品的极致体验,在市场上诸多优秀的音乐类APP中,频谱动效 是一个经典的应用场景: 图片来源:咪咕音乐 本文…

【C++】C++的IO流

目录 一、C语言的输入与输出 二、流的概念 三、CIO流 1、C标准IO流 2、C文件IO流 四、stringstream的简单介绍 一、C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量…

项目管理:如何减少项目中的信息差

在项目管理中,信息差的存在是难以避免的。 一方面,由于项目干系人各自的角色不同,项目经理不可能让每个人都知道所有的事情,以免在信息的海洋中产生更多的干扰。 另一方面,项目干系人需要了解项目的情况&#xff0c…

华为OD机试真题 Java 实现【数字序列比大小】【2023 B卷 100分】,田忌赛马,永远比你大,你服不服?

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 大家好,我是哪吒。 做技术,我是认真的,立志于打造最权威的华为OD机试真题专栏,帮助那些与我有同样需求的人&#xff…

ES6——Promise

promise 含义:异步编程解决方案 特点:1、状态不受外界影响,状态有三种:pending、fulfilled、rejected 2、状态不可逆,只能pending -> fulfilled、pending -> rejected 缺点:无法取消、不设置回调函…

常见的人体静电消除器的工作原理

人体静电消除器是一种用于消除人体带有静电的装置。静电是指物体表面具有电荷的现象,当人体带有静电时,会导致一些不舒适的感觉,同时也容易引起电击事故。 人体静电消除器的工作原理主要通过以下几个方面来实现: 1.接地&#xf…

深入篇【Linux】学习必备:认识冯诺依曼系统+理解操作系统(‘‘管理‘‘)

深入篇【Linux】学习必备:认识冯诺依曼系统理解操作系统(管理) Ⅰ.冯诺依曼系统结构1.特点(what)2.理解(why)3.案例(how) Ⅱ.操作系统概念与定位1.概念(what)2.设计OS目的(why)3.管理(how) Ⅰ.冯诺依曼系统结构 1.特点(what) 我们认识的计算机&#xff…

ETHERCAT转ETHERCAT网关三菱plc支持ethercat吗

大家好,今天要和大家分享一款神器——远创智控YC-ECAT-ECAT通讯网关!这款网关有什么厉害的呢?且听我慢慢道来。 首先,YC-ECAT-ECAT是一款自主研发的ETHERCAT从站功能的通讯网关。那什么是ETHERCAT呢?简单来说&#xff…

揭秘ChatGPT的流式返回

107. 揭秘ChatGPT的流式返回 ChatGPT是一种强大的语言模型,可以生成自然语言响应。在传统的请求/响应模型中,客户端发送请求,服务器处理请求后返回响应。但是,使用流式返回可以实现持续的数据流,使得客户端能够实时接…

水文水动力模型在城市内涝、城市排水、海绵城市规划设计中深度应用

随着计算机的广泛应用和各类模型软件的发展,将排水系统模型作为城市洪灾评价与防治的技术手段已经成为防洪防灾的重要技术途径。将聚焦于综合利用GIS及CAD等工具高效地进行大规模城市排水系统水力模型的建立,利用SWMM实现排水系统水力模拟。讲解SWMM深度…

rabbitmq使用springboot实现fanout模式

一、fanout模式 类型&#xff1a;fanout特点&#xff1a;Fanout—发布与订阅模式&#xff0c;是一种广播机制&#xff0c;它是没有路由key的模式。 二、实现 1、引入相应的pom文件 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project x…

左神算法 重要技巧:递归的加速技巧(斐波那契数列套路)以及推广

目录 【案例1】【十分重要 &#xff1a; 斐波那契递归套路&#xff0c;只要像斐波那契这种严格递归都可以进行类似的优化】 【有严格的递归项后&#xff0c;通过线性代数的知识进行优化】 【代码实现】 【技巧推广】 【实例1 使用这个技巧】 【题目描述】 【思路解析】 …

求两个数的最大值max

函数实现 int max(int a, int b); 函数接收两个整数参数&#xff0c;在内部用if语句判断哪个大&#xff0c;返回大的即可。 完整代码 #include <iostream> using namespace std;int max(int a, int b) {if (a > b){return a;}else{return b;} }int main() {int n1…

开发工具篇第25讲:阿里云MFA绑定Chrome浏览器Authenticator插件

开发工具篇第25讲&#xff1a;阿里云MFA绑定Chrome浏览器Authenticator插件 本文是开发工具篇第25讲&#xff0c;登录阿里云旗下产品时&#xff0c;需要使用mfa登录&#xff0c;每次如果要用手机看mfa码很麻烦&#xff0c; Chrome浏览器提供了一个快捷的登录方法&#xff0c;可…

软件工程师,学习下JavaScript ES6新特性吧

概述 作为一名软件工程师&#xff0c;不管你是不是前端开发的岗位&#xff0c;工作中或多或少都会用到一点JavaScript。JavaScript是大家所了解的语言名称&#xff0c;但是这个语言名称是Oracle公司注册的商标。JavaScript的正式名称是ECMAScript。1996年11月&#xff0c;JavaS…

Mysql根据积分排名

积分表&#xff1a;t_participant_points 1、带并列 SELECT p.*, CASE WHEN prevRank p.total_points THEN curRank WHEN prevRank : p.total_points THEN curRank : curRank 1 END AS ranking FROM ( SELECT total_points …

LabVIEW-实现波形发生器

一、题目 用两种方法实现一种多类型信号波形发生器&#xff08;至少包括&#xff1a;正弦波、三角波、方波等&#xff09;&#xff0c;可以调节信号频率、幅度、相位等参数&#xff0c;可以图形化显示信号波形。 需要给出产生信号波形的基本方法、程序设计基本方法以及程序实现…

931.下降路径最小和

931.下降路径最小和 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列&#xff08;即…

【图像处理】经营您的第一个U-Net以进行图像分割

一、说明 AI厨师们&#xff0c;今天您将学习如何准备计算机视觉中最重要的食谱之一&#xff1a;U-Net。本文将叙述&#xff1a;1语义与实例分割&#xff0c;2 图像分割中还使用了其他损失&#xff0c;例如Jaccard损失&#xff0c;焦点损失&#xff1b;3 如果2D图像分割对您来说…

刘铁猛C#教程笔记——详解类型,变量和对象第二节

C#类型派生谱系 C#语言五大基本类型&#xff1a; 1.类类型&#xff1a;由class关键字声明的类型&#xff0c;常见的类类型有&#xff1a;string&#xff0c;object 2.结构体类型&#xff1a;由struct关键字声明的类型&#xff0c;常见的结构体类型有&#xff1a;int&#xff0c…