在终端窗口python文件的直接运行和模块运行的区别


下图是项目的结构
在这里插入图片描述

直接运行(命令行:python aaa/bbb/1.py)

代码如下:

import sys
import os
print(sys.path)
print (os.path.abspath('.'))#获得当前工作目录
print (os.path.abspath('..'))#获得当前工作目录的父目录
print (os.path.abspath('../..'))#获得当前工作目录的父目录的父目录

终端窗口命令行命令和结果如下:

PS E:\project\SSAGCN> python aaa/bbb/1.py
['E:\\project\\SSAGCN\\aaa\\bbb', 'D:\\software\\anaconda\\install\\envs\\condaenv\\python39.zip', 'D:\\software\\anaconda\\install\\envs\\condaenv\\DLLs', '
D:\\software\\anaconda\\install\\envs\\condaenv\\lib', 'D:\\software\\anaconda\\install\\envs\\condaenv', 'D:\\software\\anaconda\\install\\envs\\condaenv\\l
ib\\site-packages']
E:\project\SSAGCN
E:\project
E:\

结论如下:

直接运行path变量里面第一个路径是python文件1.py所在的目录,’.‘是终端窗口的当前目录,’. .'是终端窗口的上一级目录,以此类推

举例:

PS E:\project\SSAGCN\aaa> python bbb/1.py
['E:\\project\\SSAGCN\\aaa\\bbb', 'D:\\software\\anaconda\\install\\envs\\condaenv\\python39.zip', 'D:\\software\\anaconda\\install\\envs\\condaenv\\DLLs', '
D:\\software\\anaconda\\install\\envs\\condaenv\\lib', 'D:\\software\\anaconda\\install\\envs\\condaenv', 'D:\\software\\anaconda\\install\\envs\\condaenv\\l
ib\\site-packages']
E:\project\SSAGCN\aaa
E:\project\SSAGCN
E:\project

模块运行(python -m aaa.bbb.1)

代码如下(没变):

import sys
import os
print(sys.path)
print (os.path.abspath('.'))#获得当前工作目录
print (os.path.abspath('..'))#获得当前工作目录
print (os.path.abspath('../..'))#获得当前工作目录

终端窗口命令行命令和结果如下:

PS E:\project\SSAGCN> python -m  aaa.bbb.1
['E:\\project\\SSAGCN', 'D:\\software\\anaconda\\install\\envs\\condaenv\\python39.zip', 'D:\\software\\anaconda\\install\\envs\\condaenv\\DLLs', 'D:\\softwa
re\\anaconda\\install\\envs\\condaenv\\lib', 'D:\\software\\anaconda\\install\\envs\\condaenv', 'D:\\software\\anaconda\\install\\envs\\condaenv\\lib\\site-p
ackages']
E:\project\SSAGCN
E:\project
E:\

结论如下:

模块运行path变量里面第一个路径是终端窗口的当前目录,’.’ 、’. .‘和’. ./. .'和直接运行含义一样。

举例:

PS E:\project\SSAGCN\aaa> python -m  bbb.1
['E:\\project\\SSAGCN\\aaa', 'D:\\software\\anaconda\\install\\envs\\condaenv\\python39.zip', 'D:\\software\\anaconda\\install\\envs\\condaenv\\DLLs', 'D:\\s
oftware\\anaconda\\install\\envs\\condaenv\\lib', 'D:\\software\\anaconda\\install\\envs\\condaenv', 'D:\\software\\anaconda\\install\\envs\\condaenv\\lib\\s
ite-packages']
E:\project\SSAGCN\aaa
E:\project\SSAGCN
E:\project

sys.path.extend()的本质

之前提到过,不论直接运行还是模块运行,’.’、’. .‘还是’. ./. .'所表达的目录是一致的。

代码如下:

import sys
from code1 import data

终端窗口命令行和结果如下:

PS E:\project\SSAGCN> python aaa/bbb/1.py
Traceback (most recent call last):
  File "E:\project\SSAGCN\aaa\bbb\1.py", line 8, in <module>
    from code1 import data
ModuleNotFoundError: No module named 'code1'

原因:

因为当前path变量里面的目录没有 E:\project\SSAGCN,所以模块调用错误。

修改代码如下:

import sys
sys.path.extend(['./'])
from code1 import data

终端窗口命令行和结果如下(没有报错):

PS E:\project\SSAGCN> python aaa/bbb/1.py
PS E:\project\SSAGCN>

举例1
代码如下:

import sys
from code1 import data

终端窗口命令行和结果如下(报错):

PS E:\project\SSAGCN\aaa> python -m bbb.1
Traceback (most recent call last):
  File "D:\software\anaconda\install\envs\condaenv\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "D:\software\anaconda\install\envs\condaenv\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "E:\project\SSAGCN\aaa\bbb\1.py", line 9, in <module>
    from code1 import data
ModuleNotFoundError: No module named 'code1'

举例2

代码如下:

import sys
sys.path.extend(['../'])
from code1 import data

终端窗口命令行和结果如下(没有报错):

PS E:\project\SSAGCN\aaa> python -m bbb.1
PS E:\project\SSAGCN\aaa>

PYTHONPATH 与 sys.path的关系

参考链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值