例如我们有如下结构的文件:

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( )

from libs.some_lib import something

else:

from ..libs.some_lib import something

以上这篇Python 从相对路径下import的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

python import 路径_Python 从相对路径下import的方法相关推荐

  1. python 自定义模块_Python 自定义模块路径

    问题: 假设我们自己写了一个名为 log_config.py 的日志记录程序模块.此模块会被其他程序所引用,如下例子. import log_config logger = log_config.lo ...

  2. python中查看相对路径_python提取相对路径

    原博文 2018-01-30 16:47 − 原理: 用绝对路径,截断根目录的路径,就得到了相对路径. 代码 方法1:字符串替换(用字符串函数)推荐 import os print('======== ...

  3. python替换img的路径为新的路径_python – Django |连接路径位于基本路径组件之外{%static img.thumbnail.url%},错误400与whitenoise...

    我已经完成了我在Django的第一个应用程序并且工作得很好,但是因为我设置了DEGUG = False,所以仍然有预部署问题- 这只是在模板中显示图像- T_T 我正在使用它,但现在当我使用white ...

  4. python学画画_python学画画(下)

    下载W3Cschool手机App,0基础随时随地学编程导语 这大概是去年深度学习最火的应用之一了吧,利用神经网络将世界名画的画风迁移到任意一张普通的图片上. 还是先放图! 左边是待转换图片,右边是供以 ...

  5. python添加时间戳_Python 给某个文件名添加时间戳的方法

    Python 给某个文件名添加时间戳的方法 发布时间:2020-09-20 18:25:15 来源:脚本之家 阅读:87 作者:cheney康 问题描述: 1.(先添加时间戳,再复制移动,两个文件加下 ...

  6. python 字符串替换_python字符串替换第一个字符串的方法

    Python 截取字符串使用 变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾. # 例1:字符串截取 str = '1234567 ...

  7. 电脑python安装库_Python安装第三方库的3种方法 -电脑资料

    这篇文章主要介绍了Python安装第三方库的3种方法,本文讲解了通过setuptools来安装python模块.通过pip来安装python模块.直接从网上下载下可执行文件来安装三种方法,需要的朋友可 ...

  8. python 收发邮件_python发送各类邮件的主要基本方法

    利用python实现基本的邮件发送. 感谢以下博客的整理,本人在学习的同时也做了一些整理 一.相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: ...

  9. python字符串数组_python将字符串转换成数组的方法

    Python 这篇文章主要介绍了Python __setattr__. __getattr__. __delattr__.__call__用法示例,本文分别对这几个魔法方法做了讲解,需要的朋友可以参考 ...

最新文章

  1. mysql 1236_Mysql主从同步Last_IO_Errno:1236错误解决方法
  2. (转) Java线程同步阻塞, sleep(), suspend(), resume(), yield(), wait(), notify()
  3. 四种数据持久化方式(上) :属性列表与归档解档
  4. 把一个中文日期时间格式字符串转为日期时间
  5. WebGL学习(1) - 三角形
  6. 格式化输出字符串变量
  7. mysql——JDBC
  8. zookeeper专题:使用zookeeper客户端实现动态监听节点并获取数据
  9. Atitit 图像处理 公共模块 矩阵扫描器
  10. SAP MM模块之批次管理
  11. 基于C#的在线语音识别软件开发
  12. 公文排版插件for Word/WPS【快点公文助手——让公文排版更快一点】
  13. java.lang.NumberFormatException For input string 错误及解决办法
  14. 自媒体是如何赚钱的?分享如何做自媒体能赚到钱!
  15. sql server 替换字段中的部分字符,替换指定字符的方法
  16. 合伙人制度是梦想、价值观和利益的捆绑
  17. C语言入门最基础教学(编译器下载)
  18. 高速视觉筛选机PCI Express实时运动控制卡XPCIE1028
  19. php arrayiteratoer,手动去除uTorrent中广告的步骤(V3.4.9依然有效)
  20. 移动端布局js动态计算rem

热门文章

  1. Jz2440 环境安装
  2. 简单的写一个发布订阅器
  3. Altium_Designer-PCB的覆铜步骤
  4. IS-IS路由协议 总结
  5. Java 线程数据交换控制器Exchange使用实例
  6. Python自动化运维工具-Fabric部署及使用总结
  7. Yii 框架学习--01 框架入门
  8. IM 融云 之 初始化及登录
  9. uva 10099 The Tourist Guide
  10. Mysql手动增加一列_Blog of Grow_百度空间