python import与相对路径

本文基于Python3,探讨import和相对路径两类问题。实验表明,import只与被执行文件所在目录有关,相对路径与当前所在目录有关。还介绍了在p2.py中引入p1.py和p2_1.py的方法,强调实验基于vscode,不考虑pycharm自动添加路径情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:又是弄视频分割的这个项目,被里面的路径搞疯了,一直报错。其实以前也遇到过路径相关的问题,但是随便折腾下,问题也就解决了,所以一直懒得去仔细钻研这问题。

本文会探讨两类问题,一是import,二是相对路径。均基于python3(更新中,自己也还在学习)。

在这里插入图片描述

pathProject
- src
-- main.py
-- package1
--- p1.py
-- package2
--- p2.py
--- p2_1.py

下面是针对自己的疑问,进行实验的结果

Q1:在pathProject下执行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')

在这里插入图片描述

Q2:如何在p2.py中引入p1.py?

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)

Q3:如何在p2.py中引入p2_1.py?

A3: 若直接在p2.py中写import p2_1,然后位于执行python main.py会报错,因为搜索路径并不能囊括进p2_1.py,需要写成from . import p2_1才行。
此处参考知乎回答:python中import的用法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值