zoukankan      html  css  js  c++  java
  • 模块导入

    一.包

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

    注:

    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 调用。而 “.” 代表的就是当前目录。

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

  • 相关阅读:
    重构:以Java POI 导出EXCEL为例
    从源码角度看LinkedList一些基本操作(jdk1.7)
    OpenCV学习笔记(1)
    尝试实现手势控制计算机(持续跟进)
    神经网络学习笔记三——梯度检验、高级优化
    神经网络学习笔记二——反向传导
    神经网络学习笔记一——Neural Network
    C++ 指针和引用 吐血整理 Pointer&Reference
    BST 解析 (二)height and deletion
    BST 解析 (一)
  • 原文地址:https://www.cnblogs.com/sunj-96/p/10746957.html
Copyright © 2011-2022 走看看