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采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
Python中使用md5sum检查目录中相同文件代码分享
Feb 02 Python
Python微信库:itchat的用法详解
Aug 14 Python
解决python3中解压zip文件是文件名乱码的问题
Mar 22 Python
解决Python网页爬虫之中文乱码问题
May 11 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
Jun 29 Python
python获取整个网页源码的方法
Aug 03 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 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
个人写的PHP验证码生成类分享
2014/08/21 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
js滚轮事件兼容性问题需要注意哪些
2016/11/15 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
Django Xadmin多对多字段过滤实例
2020/04/07 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
5款实用的python 工具推荐
2020/10/13 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
联想德国官网:Lenovo Germany
2018/07/04 全球购物
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
班组长安全职责
2014/01/05 职场文书
茶叶生产计划书
2014/01/10 职场文书
个人简历中自我评价
2014/02/11 职场文书
北京奥运会口号
2014/06/21 职场文书
调研汇报材料范文
2014/08/17 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
文案策划岗位职责
2015/02/11 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS