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 continue语句用法实例
Mar 11 Python
python通过BF算法实现关键词匹配的方法
Mar 13 Python
使用Python中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
python使用装饰器作日志处理的方法
Jul 11 Python
Python基于Socket实现简单聊天室
Feb 17 Python
Python浮点型(float)运算结果不正确的解决方案
Sep 22 Python
编写python代码实现简单抽奖器
Oct 20 Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 Python
两行代码解决Jupyter Notebook中文不能显示的问题
Apr 24 Python
Python基础之数据结构详解
Apr 28 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框架的性能
2008/01/10 PHP
php 文章采集正则代码
2009/12/28 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
JQuery点击行tr实现checkBox选中的简单实例
2016/05/26 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
js继承实现方法详解
2016/12/16 Javascript
react路由配置方式详解
2017/08/07 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
python中的sort方法使用详解
2014/07/25 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
python实现超级玛丽游戏
2020/03/18 Python
Python Map 函数的使用
2020/08/28 Python
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
银行类自荐信
2014/02/04 职场文书
工程师岗位职责规定
2014/02/26 职场文书
小学生优秀评语大全
2014/04/22 职场文书
红高粱观后感
2015/06/10 职场文书