python 路径设置的一些坑。getcwd()的深坑。
绝对路径, 相对路径, 添加本地模块
os.getcwd(), sys.path[0], os.path.realpath(file)[0]
从 os.getcwd()
说起
相同的代码,在VSCode 中正常运行,但是在pycharm
报错,提示找不到路径。对比了发现两个工具使用 os.getcwd()
的结果是不同的。
假设代码工程在
C:\Detection-PyTorch-Notebook
,代码工程目录结构如下:
Detection-PyTorch-Notebook
|
+---chapter1
| \---model-evaluation
| | evaluation.py
| | README.md
| |
| \---lib
| | detection.py
| | Evaluator.py
| | utils.py
执行的文件为 evaluation.py
。
在VSCode 中执行 os.getcwd()
结果为:C:-PyTorch-Notebook
在PyCharm 中执行 os.getcwd()
结果为:C:-PyTorch-Notebook\chapter1-evaluation
原因是 ** os.getcwd()
取的是起始执行目录**。
即如果在 C:\Detection-PyTorch-Notebook
下执行
1 | python .\chapter1\model-evaluation\evaluation.py |
那么返回: C:-PyTorch-Notebook
即如果在
C:\Detection-PyTorch-Notebook\chapter1\model-evaluation
下执行
1 | python .\evaluation.py |
那么返回: C:-PyTorch-Notebook\chapter1-evaluation
os.getcwd(), sys.path[0], os.path.realpath(file)[0]
如果evaluation.py
调用了
detection.py
,并且在 detection.py
中执行路径
os.getcwd(), sys.path[0], os.path.realpath(__file__)[0]
那么在C:\Detection-PyTorch-Notebook
下执行
evaluation.py
会得到:
os.getcwd()
C:\Detection-PyTorch-Notebook
,取的是起始执行目录
sys.path[0]
C:\Detection-PyTorch-Notebook\chapter1\model-evaluation
,取的是被初始执行的脚本的所在目录
os.path.split(os.path.realpath(file))[0]
C:\Detection-PyTorch-Notebook\chapter1\lib
,取的是file所在文件detection.py的所在目录