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网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
Python设计模式中单例模式的实现及在Tornado中的应用
Mar 02 Python
Python学习小技巧之列表项的拼接
May 20 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
python实现简单聊天应用 python群聊和点对点均实现
Sep 14 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
教你使用python画一朵花送女朋友
Mar 29 Python
Python使用pylab库实现绘制直方图功能示例
Jun 01 Python
在python中以相同顺序shuffle两个list的方法
Dec 13 Python
Python多进程写入同一文件的方法
Jan 14 Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 Python
Python小整数对象池和字符串intern实例解析
Mar 21 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
测试您的 PHP 水平的题目
2007/05/30 PHP
YII路径的用法总结
2014/07/09 PHP
PHP缓冲区用法总结
2016/02/14 PHP
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
python如何代码集体右移
2020/07/20 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
中专毕业个人的自荐信格式
2013/09/21 职场文书
租赁协议书范本
2014/04/22 职场文书
公司合作意向书范文
2014/07/30 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
Python Matplotlib库实现画局部图
2021/11/17 Python