工作目录问题,明明有该文件却import错误?

背景

最近在进行多模块集成的时候,出现了import错误的现象,虽然直接用绝对目录解决了,但是显然不优雅,在复习了有关工作目录的知识后,了解到了问题所在。故写此博客,希望对读者有所帮助。

场景说明

有两个python文件,一个是A.py一个是B.py。

A文件import B文件,由于在同一个目录下,所以直接import B。

此时在上一层目录有一个文件C.py。C文件import了A文件,当运行C文件的时候会导致A文件 import B错误。

问题原因

工作目录(也称为当前工作目录或CWD)是文件系统中的一个目录,它决定了程序在查找文件时所使用的基准路径。在Python中,当你尝试打开一个文件、读取一个模块或其他资源时,如果你没有指定完整的路径,Python通常会相对于工作目录来查找这些资源。

当A.py尝试import B时,Python解释器会在几个地方查找B.py:

  1. 内置模块(如sysos等)。
  2. 当前工作目录下的模块和包。
  3. PYTHONPATH环境变量中列出的目录。
  4. 标准库的安装位置。
  5. 第三方库的安装位置(如通过pip安装的库)。

如果B.py位于与A.py相同的目录中,并且当前工作目录不是该目录,则导入可能会失败,因为Python解释器会在当前工作目录下查找B.py,而不是A.py所在的目录。

此时的工作目录是C文件所在的目录,该目录下找不到B文件,所以 import B 会报错。

解决思路

  1. 显式指定路径:在打开文件或导入模块时,始终使用完整或相对于某个固定基准点的路径。例如,如果你知道B.py相对于A.py的位置,你可以使用from . import B(相对导入)或指定完整的包路径。

  2. 修改工作目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千天夜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值