最近断断续续学习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文件都不能单独运行了

python的相对导入的更多相关文章

  1. 使用Python 将shapefile导入mongodb

    使用Python 将shapefile导入mongodb 随着big data时代的到来,各个行业都在考虑能不能把big data的思路.方法引入进来,GIS行业也不能免俗. 下面就介绍一下如何将sh ...

  2. 6.python模块(导入,内置,自定义,开源)

    一.模块 1.模块简介 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用python标准库的方法. 类似于函数式编程和面向过 ...

  3. python importlib动态导入模块

    一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过import module 或者 from * import module的方式导入,这属于静态导入,很容易理解. 而 ...

  4. Python importlib(动态导入模块)

    使用 Python importlib(动态导入模块) 可以将字符串型的模块名导入 示例: import importlib module = 'module name' # 字符串型模块名 test ...

  5. Python import语句导入模块语法[转]

    Python import语句导入模块语法 社区推荐:掘金是国内最活跃的技术社区,我们每日有优质Python开发实例分享,海量python开源库推送.来掘金,和更多懂技术的小伙伴交流.   pytho ...

  6. [python]关于在python中模块导入问题追加总结

    [背景] 最近在写程序时,我使用的eclipse编辑器运行都没有问题,然后部署到自动化环境上却偏偏报找不到相应模块问题,现在对该问题在之前的贴子上追加总结 原帖子:[python]关于python中模 ...

  7. 在python中重新导入模块

    重新加载模块 倘若,更改了已经在 Python shell 中导入的模块,然后重新导入该模块,Python 会认为“我已经导入了该模块,不需要再次读取该文件”,所以更改将无效. 要解决这个问题,有以下 ...

  8. python中模块导入问题(已解决)

    想在python中导入request包: 无此模块,于是先安装requests包: 但是提示"Requirement already satisfied".在提示的相应目录里,找到 ...

  9. Python模块及其导入

    一.模块 1.模块的定义: 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少, 很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件 ...

  10. python random模块导入及用法

    random是程序随机数,很多地方用到,验证码,图片上传的图片名称等,下面说说python random模块导入及用法 1,模块导入 import random 2,random用法 random.r ...

随机推荐

  1. python+flask开发小白第二天

    使用VSCode编译python web页面 1.先从最基础的说起吧,关于VSCode的使用: 运行python程序与运行java,c,c++程序一样,需要新建一个文件,第一个文件建议不要新建在本地的 ...

  2. apache kylin总结

    去年12月挖的坑,今天找时间填上.update:20190119 一.kylin架构 核心是预计算,在此架构上做了一些优化.计算结果存储在Hbase,对Hive等查询转换为Hbase的Scan,提高速 ...

  3. 唯一分解定理(以Minimun Sum LCM UVa 10791为例)

    唯一分解定理是指任何正整数都可以分解为一些素数的幂之积,即任意正整数n=a1^p1*a2^p2*...*ai^pi:其中ai为任意素数,pi为任意整数. 题意是输入整数n,求至少2个整数,使得它们的最 ...

  4. SQL-存储过程-010

    什么是存储过程? 可以理解为数据库中的方法,与C#中的方法一样,具有参数和返回值: 存储过程的优点? 提高运行速度:存储过程在创造是进行编译,以后运行存储过程都不需要再进行编译,极大化的提高了数据库的 ...

  5. Ubuntu16.04安装YouCompleteMe

    1.要求vim的版本在7.4.143以上,支持python2/3,通过vim --version查看. 2.下载源码:  https://github.com/Valloric/YouComplete ...

  6. win 10 kms 激活 后 火狐 上 https 网站 报错

    原因: 系统导入了未知的根证书 影响:?? 解决方法: http://mozilla.com.cn/thread-374897-1-1.html

  7. iso系统镜像刻录到光盘和U盘

    使用UltraISO刻录 刻录U盘,点击文件,打开,选择镜像 启动,写入硬盘镜像选择U盘即可 刻录光盘 工具,刻录光盘映像,选择镜像,需要先插入光盘刻录机(有些电脑可能自带光驱盘,且有刻录功能,那么我 ...

  8. windows openssh server 安装试用

    使用Windows的可能会知道win10 的已经包好了openssh 服务,但是对于其他机器win 7 windows 2008 ,就需要其他的方法了 还好powershell 团队开发了支持wind ...

  9. Python 解决: from pip import main ImportError: cannot import name 'main'

    此次报错是因为 pip 升级出的问题: from pip import mainif __name__ == '__main__': sys.exit(main()) 改为: from pip imp ...

  10. hadoop完全分步式搭建

    实验环境介绍 4台机器,规划如下: 计算机名 IP地址 角色 master 192.168.138.200 NameNode,SecondaryNameNode,ResourceManager sla ...