python 一个能彻底理解包、模块引入的核心概念

当从不同入口文件执行Python代码时,模块导入路径会有所不同。主程序目录被视为执行环境的根目录,影响模块的相对导入。理解这一点是解决'No module named...'错误的关键。例如,`main.py`作为主文件,引用需要相对于`main.py`的路径;而`test_aaaa.py`作为主文件,需要调整路径或添加`sys.path.append()`。正确理解并运用这一原则能避免模块找不到的问题。

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

最近几天居然被一个很基础的问题给困扰了。接触python不久,总是会报告有

No module named 'xxxx' 之类的问题。

查文档,都是说引入的问题。但问题来了,我在各自目录下的测试代码没有问题,但是一旦从应用的主文件开始执行,就会报错,而且很多本来单元测试都没问题的,都报错了。

百思不得其解。

甚至同一目录下的不同模块的互下引用,都会报找不到。这在我看来,太奇怪了,一定是有一个基础概念,我理解错了。我想。

就在我从网上看各种模块引用的文章的时候,大部份都是雷同的,但有一句突然引起我的注意。

主程序所在的目录,是本次执行环境的Root

我想,这应该是问题的根源。

举例说明吧:

app -------__init__.py

     | -------main.py

     | -------packageA ------- __init__.py

     |                         | ------- aaaa.py

     |                         | ------- test_aaaa.py

     | -------packageB ------- __init__.py

                               | ------- bbbb.py

如果是这个结构,从main.py开始执行,和从test_aaaa.py开始执行,引用的路径是不一样的。

所有的引用路径,需要从主文件的目录作为 root 来出发来写。

如果 main.py 是主文件,则在test_aaaa.py中引用需要这么写:

import app.packageA 或是 from app.packageA import aaaa

import app.packageB 或是 from app.packageB import bbbb

如果 test_aaaa.py 是主文件,则在test_aaaa.py中引用需要这么写:

import aaaa

import sys

sys.path.append("../") 要加入环境变量,否则,引用不到

import packageB.bbb 或是 from bbb import packageB

python 中引用包,模块,类这个问题的最核心的知识点就是这个了。理解了这个,再复杂的引用关系也是手到擒来。

后面,再也没有出过这种问题了。为什么在网上没有找到一篇文章讲解这个内容,还是我有哪份文档没有看到?

记录一下,希望能解其他朋友的困惑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值