shell(或命令行)运行python模块时提示No module named xxx

问题描述

如下图所示,用红框标记的代码,直接在pycharm中运行,不会提示错误,因为需要引用的python包我们已经定义了
在这里插入图片描述
但是如果在shell脚本(或命令行)中运行这段代码,发现提示找不到这个模块,这是为什么呢
在这里插入图片描述

原因分析

(本部分可以不用看,直接看解决方法)
原因在于在pycharm中运行时,会将当前项目的整个文件夹路径都作为包的搜索路径,但在shell脚本(或命令行)中只搜索当前路径,搜索区域分别对应下图左和右
在这里插入图片描述
我们通过代码来进一步证实该论断
在出问题的那段代码上面加入

import sys
print("\n".join(sys.path))

sys.path的值是环境变量,即指定模块的搜索路径的字符串列表。通俗来说,也就是它是一个list变量,默然情况下python导入文件或者模块的话,他会先在sys.path里找模块的路径。如果没有的话,程序就会报错。
如下图所示
在这里插入图片描述
还是这段代码,我们在pycharm中运行,会显示
在这里插入图片描述
在shell脚本(或命令行)中运行,会显示
在这里插入图片描述
证实了上文的说法

解决方法


提供两种方法
方法一:改动sys.path,将整个项目的文件夹包括进去
代码为

import sys
sys.path.append('D:\desktop\PrismNet') 

如下图所示
在这里插入图片描述
方法二:统一脚本的运行路径是project的根文件夹,即每次都在project根文件夹下新建一个脚本,比如叫main.py。
它什么也不做,仅仅是将c.py导入进来。

有什么问题,欢迎大家留言讨论~

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值