python之绝对导入和相对导入

绝对导入

import sys, os

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)

__file__是相对路径,是因为pycharm吧之前的路径给补上了才没有报错,在终端执行就会报错,所以要用绝对路径。

import sys, os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

这样程序在哪执行都不会报错了

 

相对导入

import sys, os

from . import models
from ..proj import settings

一个点的意思是在当前目录导入
两个点是在上一级目录导入
../..是在上两级目录导入

 

需要注意的是文件夹被python解释器视作package需要满足两个条件:

  1.文件夹中必须有__init__.py文件,该文件可以为空,但必须存在该文件。
  2.不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。

所以,当用.. 或 ../..返回上级去导入的时候,如果到了程序的入口就会报错:

ValueError: attempted relative import beyond top-level package

这是因为第2条的原因,也就是相对导入的时候不能返回到顶层目录去导入,否则会报错。所以,用绝对导入的人比较多,相对导入中一个点(同级导入)用的比较多。

posted @ 2018-11-21 16:05  梁少华  阅读(2534)  评论(0编辑  收藏  举报