Yin的笔记本

vuePress-theme-reco Howard Yin    2021 - 2025
Yin的笔记本 Yin的笔记本

Choose mode

  • dark
  • auto
  • light
Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • Linux
  • MyIdeas
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • JavaScript
  • Python
  • Nvidia
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
author-avatar

Howard Yin

303

Article

153

Tag

Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • Linux
  • MyIdeas
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • JavaScript
  • Python
  • Nvidia
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
  • Python包导入问题

    • 问题描述
      • 解决方案1:使用相对路径
        • 解决方案2:将包路径加入os.path中
          • 原理

      Python包导入问题

      vuePress-theme-reco Howard Yin    2021 - 2025

      Python包导入问题


      Howard Yin 2020-11-01 15:55:02 编程语言Python实操

      # 问题描述

      有一个Python包包含许多互相导入的子包、一个在包外的脚本想要导入这个包,问包内import和包外脚本应该如何书写,使得对任意位置的包外脚本都能导入包内的所有名称?

      # 解决方案1:使用相对路径

      这是Python建议的解决方案。

      需要包是标准格式,即有__init__.py文件,否则会报“不可使用相对路径”的错误。

      包内:

      from . import xxx as x
      from . xxx import xxxx as xx
      
      1
      2

      包外:

      sys.path.append("包的上一级目录")
      import xxxxx # xxxxx为包名
      
      1
      2

      # 解决方案2:将包路径加入os.path中

      在__init__.py文件中写上:

      sys.path.append(os.path.split(os.path.abspath(__file__))[0])
      
      1

      包外:

      import xxxxx
      import xxx as x
      from xxx import xxxx as xx
      
      1
      2
      3

      # 原理

      __init__.py文件开头的那就好

      Python启动时,os.path中会有一系列预置的路径(一般为当前目录+pip安装的包的路径),当需要import时,Python会从os.path所指的路径中查找所需要import的名称,进行导入。换句话说,所有在os.path所指目录下的文件都相当于在当前目录下,与当前目录下的Python平起平坐。

      因此,将包路径加入os.path中就相当于这个包的内容处在当前目录下,这个包是不是一个标准的包都无所谓了。

      __init__.py文件开头的那句话将__init__.py的上级目录,即包的根目录加入到os.path,import这个包时此句自动执行,之后所有import操作就都如同在包内一样了。

      帮助我们改善此页面!
      创建于: 2020-11-01 15:55:20

      更新于: 2020-11-01 15:55:20