赞
踩
前言:又是弄视频分割的这个项目,被里面的路径搞疯了,一直报错。其实以前也遇到过路径相关的问题,但是随便折腾下,问题也就解决了,所以一直懒得去仔细钻研这问题。
本文会探讨两类问题,一是import,二是相对路径。均基于python3(更新中,自己也还在学习)。
pathProject
- src
-- main.py
-- package1
--- p1.py
-- package2
--- p2.py
--- p2_1.py
下面是针对自己的疑问,进行实验的结果
python src/main.py
与pathProject/src下执行python main.py
的区别?A1:
首先,对于import来说,只与被执行文件所在的目录有关,上面两种方式产生的结果都是将pathProject/src加入sys.path中(参考实验1代码;
其次,对于相对路径来说,则与当前的所在目录有关,在pathProject下执行python src/main.py
,无论哪个文件中,相对路径都是基于pathProject,在pathProject/src下执行python main.py
,相对路径都是基于pathProject/src(参考实验2代码)。
实验1
"""
p2.py
"""
import sys
print(sys.path)
实验结果
实验2
"""
p2.py
"""
import os
print(os.path.abspath('.'))
"""
main.py
"""
from package2 import p2
if __name__ == '__main__':
print('main')
A2:这取决于被执行的文件目录,如同第一个问题一样,import的原理就是通过sys.path检查搜索路径,若当前位于src内,那么在p2.py中写from package1 import p1
,然后执行python package2/p2.py
,则会报错,因为sys.path中包含的路径是src/package2,没有package1的搜索路径;
反之,若在src内,执行python main.py
,则不会报错,因为sys.path内包含src,也就是囊括了package1所在路径。
(ps: pycharm会自动将一些路径加入sys.path,此处不考虑这种情况,本文所有实验均基于vscode)
A3: 若直接在p2.py中写import p2_1
,然后位于执行python main.py
会报错,因为搜索路径并不能囊括进p2_1.py,需要写成from . import p2_1
才行。
此处参考知乎回答:python中import的用法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。