ImportError: attempted relative import with no known parent package---------python框架的路径

       对于Python在开发中因为调用其它模块而省时省力,并提高了开发效率,而且为了满足自身需求可以自行编写脚本和功能,而导入方式不当,则会抛出如上错误。导入文件分两种情况

 ,在相同 的工作目录下

       从最简单的导入来说,在同一个目录importProject下创tA.py内容:A = "this is A."  和B.py内容:B="this is B."  那么从projectA.py导入B。

import B

A = "this is A"
print(B.B)

二,在不同的工作目录下

 可如果在importProject下在创建一个文件夹将两个py文件装入dirs文件夹在进行导入再创建一个c.py呢,从C中导入A或者B呢,

from dirs import b

print(b.B)

但工作中往往没有那么简单,因为一个项目文件和APP静态文件较多,不会简单成这样,则需要os模块改变当前的工作目录,而所谓的 ‘根目录’就是项目Project这个下的目录,所以Python导入不了这个Project,但在这之下就都是项目根目录下的文件 。Django和flask的跟目录都是在项目名之下,但web的根目录则是跟下的static下的目录

而在Python2中必须有__init__.py文件,没有这个文件叫做目录有的叫做包,只有有init文件再能称作“包”被导入。而Python3则不必py2和py3的__init__文件共有功能,初始化包。再导入包前,会先调用__init__文件,将整个包内的文件执行一遍 ,将包初始化。

而且需要os模块确定文件路径和改变工作路径           

os.path.dirname(__file__)      当前的文件路径

                  os.chdir(os.path.dir)

os.getcwd()      当前的工作目录

os.chdir()        改变当前工作目录到指定的路径,   eg:     os.chdir("../")   法用于改变当前工作目录到上一层路径

而这是让人不好掌握的点在于,冲当前路径和上一路径导入,看着没有问题就会报出标题的错误

from . import b
from .. import dirs

原因在于相对导入需要用到父级包作为相对的参考位置而这个位置是通过__name__属性和__package__属性进行决定的。当__name__和__package__为None的是时候导致的问题没有父级包。在文件中打印这两个就会发现不同name 会显示包下的文件

而package则会到包的位置为止

所以今后可以先导入需要区分的工作目录

os.getcwd查看当前的工作的目录在哪,通常我们一般都是在项目目录外嵌套一个工作目录,目录名与工作目录一致

如果使用编译器打开那个目录,就将Python的工作目录设置那一层,只有上述结果才能实现下方的导入方法

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值