ImportError: attempted relative import with no known parent package 因为报错,决定整理一下import用法,做个笔记
import modulename [as alias] import 模块名,这时python可以引入以下两种模块; 举例如下:
from modelname import member 参数说明如下: modelname:模块名称,区分字母大小写,需要和定义模块时设置的模块名称的大小写保持致。 member:用于指定要导入的变量、函数或者类等。可以同时导入多个定义,各个定义之间使用逗号“,”分隔。如果想导入全部定义,也可以使用通配符星号“*”代替。
import 模块名:这种方式引入模块时,使用模块内的函数,需要使用模块.函数名的方式来调用函数
from 模块名 import * : 这种方式引入模块时,可以直接使用函数
上面的方式引入了包内所有的函数,有时我们只会用其中一个或几个函数,这时候 我们可以使用以下方式: from random import random,randint
有时我们需要引用当前py文件的父文件夹的模块,这时可以使用相对引用;(但是这种引用,当其他文件引用本py时,有报错风险; 只有在一个项目中的文件相互引用时,由于文件夹结构是固定的,所以推荐使用相对引用
这时会报错:ValueError: attempted relative import beyond top-level package; 相对引用就会出现这样的错误,解决办法如下: 在环境变量地址中,加入顶级目录的路径,然后从高向低引用;
输出
在D:\PY_useful文件夹中创建文件夹 File_4,File_4中创建M4.py文件,M4.py 中的内容为:
如果想在别的地方,引用这里的Func4() 函数,有两种方法:
首先需要将模块所在的路径(D:\PY_useful\File_4),加入环境变量路径中,然后通过引用模块,来使用Func4()函数; a. 引入模块,然后通过模块调用函数
b. 直接引入模块中的函数
首先需要将包(我们把File_4当作包)所在的路径(D:\PY_useful),加入环境变量路径中,然后通过引用包,来使用模块,再通过模块调用Func4()函数;
package:通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件便是 init.py。然后是一些模块文件和子目录,假如子目录中也有 init.py 那么它就是这个包的子包了。 当程序不能把文件夹当作包时,在文件夹中建立空的py文件,文件名修改为: init.py , 有了这个空文件,文件夹会被python程序理解成包;
a. 通过包,引入模块来调用函数;
b. 通过包,引入模块,再引入指定函数;
想要解决函数名冲突,我们必须先明白Python的搜索模块顺序,python 按照顺序搜索模块,找到匹配项便会直接返回,不再向后查找,所以当有函数名相同的情况发生时,先被找到的函数会被执行;
主要是学习的这篇文章,条理清晰
参考了这篇文章,具体内容比上篇细致,先码住
我的另一篇文章:jupyter notebook中调用文件内自定义的函数
一般就是直接引入;最近相对引入要用的比较多,老是报错,这个文章介绍的挺清楚的;学吧学吧。 以后遇见其他相关问题会不断更新的。
结构如下:
报错“attempted relative import with no known parent package“
打开File->Setting->python structure
点击add contend root ,选择所在文件夹
mark as sources,OK
您需要 登录 才可以下载或查看,没有账号?立即注册
使用道具 举报
本版积分规则 发表回复 回帖后跳转到最后一页
荣誉红客
8 小时前
10 小时前
昨天 20:09
昨天 16:56
昨天 16:49
中国红客联盟公众号
联系站长QQ:5520533