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的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
Python复制文件操作实例详解
Nov 10 Python
python爬虫爬取某站上海租房图片
Feb 04 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
python实现三维拟合的方法
Dec 29 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
Mar 01 Python
很酷的python表白工具 你喜欢我吗
Apr 11 Python
对pytorch中的梯度更新方法详解
Aug 20 Python
PyCharm第一次安装及使用教程
Jan 08 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 Python
详解python内置模块urllib
Sep 09 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
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
PHP速成大法
2015/01/30 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
js里的prototype使用示例
2010/11/19 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
Python实现一个简单的验证码程序
2017/11/03 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
Python命令行解析模块详解
2018/02/01 Python
python3+PyQt5重新实现自定义数据拖放处理
2018/04/19 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
Python单元测试简单示例
2018/07/03 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
python集合常见运算案例解析
2019/10/17 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
师德个人剖析材料
2014/02/02 职场文书
采购部经理岗位职责
2014/02/10 职场文书
预防煤气中毒方案
2014/06/16 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
2016年春节问候语
2015/11/11 职场文书
生产实习心得体会范文
2016/01/22 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
python中pandas对多列进行分组统计的实现
2021/06/18 Python