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的垃圾回收机制深入分析
Jul 16 Python
Python3里的super()和__class__使用介绍
Apr 23 Python
用Python编写脚本使IE实现代理上网的教程
Apr 23 Python
Python实现加载及解析properties配置文件的方法
Mar 29 Python
详解PyTorch批训练及优化器比较
Apr 28 Python
python多个模块py文件的数据共享实例
Jan 11 Python
解决Pycharm界面的子窗口不见了的问题
Jan 17 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
基于Python中isfile函数和isdir函数使用详解
Nov 29 Python
python操作gitlab API过程解析
Dec 27 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
用Python远程登陆服务器的步骤
Apr 16 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
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
js取得url地址参数实例
2013/02/22 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
[01:15:36]加油刀塔第二期网络版
2014/08/09 DOTA
java中的控制结构(if,循环)详解
2019/06/26 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
python解析多层json操作示例
2019/12/30 Python
美国温暖商店:The Warming Store
2018/12/15 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
数据库方面面试题
2012/04/22 面试题
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
入党申请人的自我鉴定
2013/12/01 职场文书
《故都的秋》教学反思
2014/04/15 职场文书
机械机修工岗位职责
2014/08/03 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
国家助学金感谢信
2015/01/21 职场文书
大学生助学金感谢信
2015/01/21 职场文书
初三语文教学反思
2016/03/03 职场文书
Python生成九宫格图片的示例代码
2021/04/14 Python
openstack云计算keystone组件工作介绍
2022/04/20 Servers
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技