博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python的相对导入
阅读量:5290 次
发布时间:2019-06-14

本文共 980 字,大约阅读时间需要 3 分钟。

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

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

先定义一个包

adb包

这个包里面有2个py文件

__init__.py

app.py

两个文件代码如下

__init__.py

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

app.py

from . import mainfrom . import textclass 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 appx = 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文件都不能单独运行了

转载于:https://www.cnblogs.com/hh2737/p/9324188.html

你可能感兴趣的文章
11.基本包装类型
查看>>
ajax连接服务器框架
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
用HttpCombiner来减少js和css的请问次数
查看>>
FUSE-用户空间文件系统
查看>>
将tiff文件转化为jpg文件并保存
查看>>
ubuntu 16.04 开机脚本
查看>>
 VS2012 C#调用C++ dll
查看>>
TCL:表格(xls)中写入数据
查看>>
SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)
查看>>
django 学习笔记(转)
查看>>
控制台程序秒变Windows服务(Topshelf)
查看>>
字节流与字符流的区别详解
查看>>
20141026--娱乐-箱子
查看>>
自定义分页
查看>>
Oracle事务
查看>>
任意输入10个int类型数据,把这10个数据首先按照排序输出,挑出这些数据里面的素数...
查看>>
String类中的equals方法总结(转载)
查看>>
图片问题
查看>>