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平台锁定键盘输入的方法
Mar 05 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
python实现五子棋人机对战游戏
Mar 25 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
QT5 Designer 打不开的问题及解决方法
Aug 20 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
Nov 28 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Apr 04 Python
python数字图像处理之图像的批量处理
Jun 28 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 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
Python中用Spark模块的使用教程
2015/04/13 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
django session完成状态保持的方法
2018/11/27 Python
python中dict使用方法详解
2019/07/17 Python
Python shutil模块用法实例分析
2019/10/02 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
python的range和linspace使用详解
2019/11/27 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
查询优化的一般准则有哪些
2015/03/08 面试题
幼儿园秋游感想
2014/03/12 职场文书
人力资源管理系自荐信
2014/05/31 职场文书
体育节口号
2014/06/19 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书