Python 从相对路径下import的方法


Posted in Python onDecember 04, 2018

例如我们有如下结构的文件:

pkg/
 __init__.py
 libs/
 some_lib.py
 __init__.py
 components/
 code.py
 __init__.py

如果我们想要在code.py中调用libs/some_lib.py这个module,比如使用相对调用:from ..libs.some_lib import something,仅仅在package中加上__init__.py是不够的。python会返回ValueError: Attempted relative import in non-package这个错误。那么这个问题如何解决呢?

有以下解决方法:

将当前路径加入sys.path

考虑到compontent和libs是处于同一级别的文件夹,我们可以直接在code.py中加入如下代码来把当前文件夹的母文件夹加入系统路径。

import sys
from os import path
sys.path.append( path.dirname( path.dirname( path.abspath(__file__) ) ) )

或者如下(这种情况对任何关系的文件夹都适用,只要我们在lib_path中给出到达该文件夹的绝对路径):

import os, sys
lib_path = os.path.abspath(os.path.join('..'))
sys.path.append(lib_path)

这样我们就可以用from libs.some_lib import something来import了。

以package模式执行该代码:

python -m pkg.components.code

然后我们就可以用from ..libs.some_lib import something 来import了。

注意这里不需要.py作为文件结尾。

总结

我们实际上可以结合这两种方法:

if __name__ == '__main__':
 if __package__ is None:
  import sys
  from os import path
  sys.path.append( <path to the package> )
  from libs.some_lib import something
 else:
  from ..libs.some_lib import something

以上这篇Python 从相对路径下import的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python获取Windows或Linux主机名称通用函数分享
Nov 22 Python
Python实现选择排序
Jun 04 Python
python实现各进制转换的总结大全
Jun 18 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
Python 查看文件的读写权限方法
Jan 23 Python
Python基于property实现类的特性操作示例
Jun 15 Python
Django中如何使用sass的方法步骤
Jul 09 Python
kali中python版本的切换方法
Jul 11 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
python3.8动态人脸识别的实现示例
Sep 21 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
Python实现猜拳与猜数字游戏的方法详解
Apr 06 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 #Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
Dec 04 #Python
对web.py设置favicon.ico的方法详解
Dec 04 #Python
对python 命令的-u参数详解
Dec 03 #Python
python 接收处理外带的参数方法
Dec 03 #Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 #Python
浅谈python脚本设置运行参数的方法
Dec 03 #Python
You might like
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
php多层数组与对象的转换实例代码
2013/08/05 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
原生javascript兼容性测试实例
2013/07/01 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
javascript验证内容为数字以及长度为10的简单实例
2016/08/20 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
Python数据处理numpy.median的实例讲解
2018/04/02 Python
python设置环境变量的作用和实例
2019/07/09 Python
django 中的聚合函数,分组函数,F 查询,Q查询
2019/07/25 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
基本款天堂:Everlane
2017/05/13 全球购物
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
Baracuta官方网站:Harrington夹克,G9,G4,G10等
2018/03/06 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
高中运动会入场词
2014/02/14 职场文书
学校三八妇女节活动情况总结
2014/03/09 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
工作散漫检讨书
2014/09/16 职场文书
年度考核个人总结
2015/03/06 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
公司老总年会致辞
2015/07/30 职场文书
Python如何使用循环结构和分支结构
2022/04/13 Python