模块导入

一.包

当模块越来越多时,就需要把模块分类。像下图,一个文件夹管理多个模块,这个文件夹就叫做包。

注:

1.文件夹被视为包需要在文件夹内创建一个_init_.py文件,虽然在Python3中不加也不会出错,但是一般默认加此文件。

2.不能作为主函数的入口。

二.跨模块导入

1.执行manage.py,manage.py所在的位置已经加到了sys.path了,当从crm中调用views.py时就不会报错。

2.当不执行manage.py时,想直接从views.py中调用settings.py,需要加入想调用函数的路径。

import os,sys

BASEDIR = os.path.dirname(os.path.dirname(_file_))  #回到与crm、my_proj的同级目录

sys.path.append(BASEDIR)                  #添加目录

from proj import settings

但此方法获取的是相对路径,程序执行时可能由于无法找到需要获取的模块而报错。

3.

import os,sys

BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(_file_)))  #获取绝对路径之后再回到同级目录

sys.path.append(BASEDIR)

from proj import settings

用这个方法先获取文件的绝对路径,就绝对不会出错了。

三.相对导入

假如执行manage.py后需要从views.py中调用models.py,需要用到 from crm import models ,而不能直接用import models调用,这是因为先执行manage.py,路径就是manage.py所在的路径,而manage.py

所在的路径并不存在models.py,所以不能直接调用。

假如,models.py和views.py与最外层目录间存在很多层目录,如果需要调用时,程序就需要写很多层,一直写到models.py所存在的目录。所以可以使用 from . impor models 调用。而 “.” 代表的就是当前目录。

注:导入时一定不要到程序的根目录,假如到了文件的根目录的话,因为文件的根目录并不算是一个包,所以调用就会报错。

猜你喜欢

转载自www.cnblogs.com/sunj-96/p/10746957.html