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编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
使用Python装饰器在Django框架下去除冗余代码的教程
Apr 16 Python
Python3.2中Print函数用法实例详解
May 19 Python
python生成器表达式和列表解析
Mar 10 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
set在python里的含义和用法
Jun 24 Python
python利用dlib获取人脸的68个landmark
Nov 27 Python
浅谈python的elementtree模块处理中文注意事项
Mar 06 Python
Django Path转换器自定义及正则代码实例
May 29 Python
详解Python设计模式之策略模式
Jun 15 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数据库操作面向对象的优点
2006/10/09 PHP
php curl_init函数用法
2014/01/31 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
Knockoutjs快速入门(经典)
2012/12/24 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
详解Javascript数据类型的转换规则
2016/12/12 Javascript
微信小程序 picker 组件详解及简单实例
2017/01/10 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
Python的高级Git库 Gittle
2014/09/22 Python
Python中List.index()方法的使用教程
2015/05/20 Python
详解Python发送邮件实例
2016/01/10 Python
浅谈tensorflow中张量的提取值和赋值
2020/01/19 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
请说出几个常用的异常类
2013/01/08 面试题
《特殊的葬礼》教学反思
2014/04/27 职场文书
主持人演讲稿
2014/05/13 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
清明祭英烈活动总结
2015/05/11 职场文书