python导入本/子目录模块

本文介绍了Python中如何导入本目录及子目录下的模块。重点在于理解模块与包的概念,以及sys.path的重要性。使用相对导入时需注意路径问题,以确保在不同环境下能正确引用。对于子目录的导入,需要将子目录路径添加到sys.path中。

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

1. python中的模块

python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包。 只要模块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用。

上面这段描述最重要的两个点:

  • py文件是一个模块
  • 导入的模块必须在sys.path中
  • __init__.py 文件中会写入包的一些信息,包括导入是应该导入哪些模块等等


2. 导入本目录下的模块(同一目录)

对于同一目录下的两个文件a.py和b.py。
a.py:

def a_print() :
    print(" I am a ")

如果要想在b.py中用a模块中的a_print()函数,则一般我们直接写成:

from a import a_print
....
a_print()
....

事实上,我也一直这么用。

但是这种用法有一个问题,需要就是b.py文件本身run。换句话说,如果有不在同一目录下的文件main.py通过导入b模块来引用a模块中的函数,是不可行的。b.py中必须写成:

from .a import a_print

加上【.】的意思就是相对路径导入。关于这一点,stackoverflow中有个问题下举例解释的非常清楚,我就不再搬运了,传送门
http://stackoverflow.com/questions/16981921/relative-imports-in-python-3


3. 导入子目录下的模块

虽然题目是子目录,其实说白了就是不同目录下的其他模块,也就是py文件。根据前面所述,这条路径必须是在sys路径。

因为很简单,python import就是在sys目录中查找模块并导入。

此处还需注意,如果我们直接这样写:

sys.path.append('./subdir')  # 此处使用相对路径

那么就会出现上述第二条的那种情况,因为对于执行不同的脚本文件,相对路径是不一样的,也就是说在其他目录中导入这个文件时,子目录下模块的相对路径就不是”./”了。

通常如下处理:

current_path = os.path.dirname(__file__)
module_path = os.path.join(current_path, 'subdir')
sys.path.append(module_path)        # 导入的绝对路径
mod = __import__('modules', globals(), locals())

然后就是正常的导入了(不用加路径,直接import 模块名字)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值