Python包的相对导入时出现错误的解决方法

Python018

Python包的相对导入时出现错误的解决方法,第1张

解决python相对导入出现错误:Attempted relative import beyond toplevel package

参考: https://blog.csdn.net/dingyiye2649/article/details/81145008?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

文件夹被python解释器视作package需要满足两个条件:

1、文件夹中必须有 init .py文件,该文件可以为空,但必须存在该文件。

2、不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。

一、首先看看目录的结构:

二、我在search.py中导入views包下的production.py和search.py,运行search.py的时候直接报错找不到views包,其实问题就在于包的搜索路径,因为是在flaskr这个目录下运行的,打印出来的包搜索路径为(['/project/my_flask_project/flaskr', '/usr/local/python3/lib/python36.zip', '/usr/local/python3/lib/python3.6', '/usr/local/python3/lib/python3.6/lib-dynload', '/usr/local/python3/lib/python3.6/site-packages']),解释器会把/project/my_flask_project/flaskr加入导搜索路径,自然导包的时候,也会在这个路径下搜索,找不到就报错。

三、所以,知道问题所在了,只需要把这个项目的路径加入到搜索路径即可

sys.path.append(os.path.abspath('..')) 

这个操作是把当前目录的上一级目录添加到包搜索路径中,这样问题就解决了

第一次用Python做项目,两个package包放在同一个source文件夹下面,import却无法导入,折腾了好久,原来是python默认的根目录的问题

当没有设置新的根目录时:project structure是这样的,没有设置

此时,如下图 1、test_module.py 文件中import common时出错(红色波浪线) ,而import source文件有3 这个提示,说明可以导入进来,就是因为根目录默认是sources

在setting——project——project structure里面,单击mark as后面的①sources 右键②把sources添加到源文件中,可以看到右边③的效果

此时可以import common了