zoukankan      html  css  js  c++  java
  • python的相对导入

    最近断断续续学习flask,学到蓝本时候有点小问题卡住了,问题如下

    导入包的时候py文件里使用了相对路径导入,但是这种导入方法不是很明白,就自己搜索加实验了终于有点眉目了

    先定义一个包

    adb包

    这个包里面有2个py文件

    __init__.py

    app.py

    两个文件代码如下

    __init__.py

    import os
    class Main:
        def __init__(self):
            pass
        def shows(self):
            return "ss"
    
    main = Main()
    text = os.getcwd()

    app.py

    from . import main
    from . import text
    
    
    class Adb:
        def __init__(self, name):
            self.name = name
    
        def show(self):
            return self.name

    我们单独执行app.py的话会报错

    说是找不到main模块

    这是为啥呢,后来百度了一番,虽然自己还不明白,但是大概意思是说,这种相对路径导入方法,不能直接执行这个app.py文件,需要别的py文件来调用这个adb包,才能执行app里导入的东西,那我们就创建一个Py文件,创建的这个py文件在adb文件夹的上一目录

    看下代码

    test.py

    from adb import app
    x = app.Adb("joke")
    print(x.show())
    print(app.main.shows())
    print(app.text)

    执行这个文件看下结果

    这次结果正确了

    虽然还不是很明白,但是至少知道怎么使用了,包内py文件导入当前目录内的其他py文件定义的类,函数或者变量等,导入后,直接执行包内的这个py文件是会报错的,也就是包内相对导入后,只能在包的外部导入这个包来调用。

    相对导入只能用于同一个package里,并且包内的文件不能单独运行

    也就是说在adb这个包里

    __init__.py和app.py可以相互导入相互定义的东西,但是不能导入包外其他py文件定义的,并且导入后这2个py文件都不能单独运行了

  • 相关阅读:
    Linux网络连接图标不见了
    使用fiddler4实现手机抓包的相关配置
    selenium之 时间日期控件的处理
    vue 上传文件示例
    从入门到自闭之Python解释器安装
    从入门到自闭--并发编程
    Python高阶操作--关于数据清洗
    Python高阶操作--数据分析的理解
    python --数据库、网络编程
    python基础
  • 原文地址:https://www.cnblogs.com/hh2737/p/9324188.html
Copyright © 2011-2022 走看看