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 相关文章推荐
netbeans7安装python插件的方法图解
Dec 24 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
Jul 04 Python
浅谈flask截获所有访问及before/after_request修饰器
Jan 18 Python
Windows下PyCharm安装图文教程
Aug 27 Python
python 多线程串行和并行的实例
Feb 22 Python
浅谈pycharm使用及设置方法
Sep 09 Python
python中必要的名词解释
Nov 20 Python
python连接打印机实现打印文档、图片、pdf文件等功能
Feb 07 Python
Django ModelForm操作及验证方式
Mar 30 Python
Python中如何添加自定义模块
Jun 09 Python
python读写数据读写csv文件(pandas用法)
Dec 14 Python
python 日志模块logging的使用场景及示例
Jan 04 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
打造计数器DIY三步曲(上)
2006/10/09 PHP
php session和cookie使用说明
2010/04/07 PHP
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
php 获取本地IP代码
2013/06/23 PHP
php中调用其他系统http接口的方法说明
2014/02/28 PHP
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
python实现多人聊天室
2020/03/31 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
python ChainMap的使用和说明详解
2019/06/11 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
遇到的Mysql的面试题
2014/06/29 面试题
参观监狱心得体会
2014/01/02 职场文书
医药营销个人求职信
2014/04/12 职场文书
干部作风建设心得体会
2014/10/22 职场文书
毕业班工作总结
2015/08/10 职场文书
环保建议书范文
2015/09/14 职场文书
2019年入党思想汇报
2019/03/25 职场文书
Python中三种花式打印的示例详解
2022/03/19 Python