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登陆asp网站页面的实现代码
Jan 14 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
python 全局变量的import机制介绍
Sep 07 Python
python抽取指定url页面的title方法
May 11 Python
用python标准库difflib比较两份文件的异同详解
Nov 16 Python
如何在django里上传csv文件并进行入库处理的方法
Jan 02 Python
Pycharm之快速定位到某行快捷键的方法
Jan 20 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
python开启debug模式的方法
Jun 27 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
python多线程semaphore实现线程数控制的示例
Aug 10 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
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
php实现RSA加密类实例
2015/03/26 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
thinkPHP中volist标签用法示例
2016/12/06 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
自定义vue全局组件use使用、vuex的使用详解
2017/06/14 Javascript
javascript将非数值转换为数值
2018/09/13 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
Python多进程原理与用法分析
2018/08/21 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
基于python实现从尾到头打印链表
2019/11/02 Python
python实现小世界网络生成
2019/11/21 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
vue常用指令代码实例总结
2020/03/16 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
毕业生找工作的自我评价
2013/10/18 职场文书
拔河比赛口号
2014/06/10 职场文书
百日安全生产活动总结
2014/07/05 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
银行服务理念口号
2015/12/25 职场文书