深度学习-pytorch实践-day5

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的所在目录