首页 > 编程语言 > 详细

python中的import小坑

时间:2020-06-27 21:23:34      阅读:80      评论:0      收藏:0      [点我收藏+]
  • 当文件名(a.py文件)和文件夹名(文件夹a)相同时,在a.py文件中使用from a import xxx,此时a会优先解析为a.py文件,而非文件夹a

  • python中import某个A模块时,首先会从python的内置模块中查找是否含义该模块的定义;若未查询到会从sys.path对应的模块路径查询是否含有对应模块的定义,如果搜索完成依然没有对应A模块时则抛出import的异常

  • 引用同级目录的其他*.py文件,可以直接用import

  • 引用下级目录的其他*.py文件,可以直接用from xx import xx

  • 引用其他目录的其他*.py文件,可以用如下代码将项目根目录所在的绝对路径加入sys.path,即python搜索模块的路径列表,再从项目根目录采用from xx import xx逐级向下引用

    # 将项目根目录加入到sys.path中
    # way 1 
    import sys
    import os
    # 返回当前目录的绝对路径(实质上,在vscode环境下,是项目所在的绝对路径,即.vscode文件夹所在的目录)
    # 参数为‘..‘时,返回当前目录的上级目录的绝对路径
    dir = os.path.abspath(‘.‘)
    sys.path.append(dir)
    
    
    # way 2
    import sys
    # 参数随引用文件所在的位置而定
    # 参数为‘‘或者‘.‘,指的是项目的根目录
    sys.path.append(‘.‘)
    
  • 关于"."和".."

    # 从当前package中查找XX
    from . import XX
    # 从上一层package中查找XX
    from .. import XX
    

    注意:若case/main.py作为入口文件"__main__",此时文件夹case是不会被当成一个package的。例如有目录树如下:

    case/
    |—— package1
    |	|—— __init__.py
    |	|—— file1.py
    |—— package2
    |	|—— __init__.py
    |	|—— file2.py
    |—— __init__.py
    |—— main.py
    

    同时有如下代码

    # case/package1/file1.py
    from .. import package2
    
    # case/main.py
    import package1.file1
    

    此时虽然case文件夹下有"__init__.py"文件,理应作为一个package。但是当直接执行case/main.py时,就没有把完整的case当作一个package来处理。因此在main.py里import package1.file1的时候,文件file1.py中的from .. import package2会因为找不到上一层的package而报错。

    同样的,将file1.py作为入口文件,文件夹case也不会被当作是一个package


python中的import小坑

原文:https://www.cnblogs.com/okcokc/p/13199864.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!