问题描述
如下图所示,用红框标记的代码,直接在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导入进来。
有什么问题,欢迎大家留言讨论~