python 导入包的路径_关于python包引用过程路径层次的问题

5912c25cae7544ef544e9a4bd77d7ed0.png

对于

my_test - - ansemb
- - - - __init__.py
- - - - config.py
- - - - dataset
- - - - - - test.py
- - fine.py

这个目录而言(粗体是文件夹)

因为__init__.py的存在使得ansemb变成包,

从而,同级目录下的fine.py可以调用其中任何一个文件。

__init__.py 文件定义了包bai的属性和方法。其实它可以什么也不定义;可以只是一个空文件,但是必须存在。如果 __init__.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。

config.py中我定义:

def ok():
    print(1)

bb = 1
cc = 2

我在test.py中可以引用上层目录下config.py的文件:

from ansemb.config import *

bb=bb
cc=cc
ok()

但是,这里很关键:我不能执行test.py,因为此时config.py在其上层目录中。

但是,我可以通过在fine.py中定义如下语句:

import ansemb.dataset.test as data

data.ok()
print(data.bb, data.cc)

来间接使用到test.py对于config.py的调用。

这是因为python是一种解释性质的语言,执行过程是顺序的,所以上述过程,相当于在fine.py中执行了:

from ansemb.config import *

这是可行的(config.py在其下层目录中)。


作为一个规范的代码。最好不要随便跨层次调用上层的库。如果实在要执行该步骤(test.py执行过程中调用config.py),最好的办法是把ansemb这个包的路径使用:

sys.path.append()

命令,将其放到执行路径中。

此时test.py完整代码如下

import os.path as osp
import sys
osp.dirname(__file__) #得到当前文件所在路径
osp.abspath(osp.join(this_dir, '..')) #得到绝对路径
sys.path.append(project_root) #加入运行时路径
from config import *
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值