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 相关文章推荐
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
python统计一个文本中重复行数的方法
Nov 19 Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
pandas把dataframe转成Series,改变列中值的类型方法
Apr 10 Python
Python实现的在特定目录下导入模块功能分析
Feb 11 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
python有序查找算法 二分法实例解析
Feb 18 Python
使用python实现多维数据降维操作
Feb 24 Python
Python PyQt5整理介绍
Apr 01 Python
Pytorch转tflite方式
May 25 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 Python
python神经网络学习 使用Keras进行回归运算
May 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
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
JS hashMap实例详解
2016/05/26 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
numpy中的高维数组转置实例
2018/04/17 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
python实现文件的备份流程详解
2019/06/18 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
爱奇艺VIP会员:大剧抢先看
2018/07/11 全球购物
最热门的自我评价
2013/12/30 职场文书
安全检查验收制度
2014/01/12 职场文书
室内趣味活动方案
2014/08/24 职场文书
党员群众路线对照检查材料
2014/08/31 职场文书
学党史心得体会
2014/09/05 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
技术支持岗位职责
2015/02/13 职场文书
党支部培养考察意见
2015/06/02 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript