Python 从相对路径下import的方法
作者:耀凯考前突击大师 发布时间:2023-06-15 03:16:10
标签:Python,相对,路径,import
例如我们有如下结构的文件:
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
来源:https://blog.csdn.net/Yaokai_AssultMaster/article/details/77932522


猜你喜欢
- 本文实例讲述了Python实现从订阅源下载图片的方法。分享给大家供大家参考。具体如下:这段代码是基于python 3.4实现的,和pytho
- 一维插值插值不同于拟合。插值函数经过样本点,拟合函数一般基于最小二乘法尽量靠近所有样本点穿过。常见插值方法有拉格朗日插值法、分段插值法、样条
- 如果你的Mysql数据库安装在centos7的系统上,并且你的操作系统启用了防火墙。应用要访问mysql数据库,你有2个解决方案。方案一:停
- 最近,W3C的一项公告称,在W3C与XHTML2的合同于今年年底到期后将不会续签。这意味着W3C停止了对XHTML2的开发,转而大力支持HT
- 废话不多说了,直接给大家贴代码了,具体代码如下所示:// ----ajax begin $.ajax({type: "
- 如何要恢复Master数据库呢?方法1:重装SQL,但是数据就Over掉了方法2:重建Master Rebuildm.exe 用到SQL的安
- 做了一下mysql升级,开发机上mysql升级到5.6版本,结果连接一些低版本的mysql服务器报出如下异常:Warning: mysql_
- python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。smtp协议的基本命令包括:HELO 向服
- 1、HTML部分<Col span="2">上传文件:</Col><Col span=&q
- 我们经常会有对图像边缘做扩展的需求.比如希望卷积后得到的矩阵大小不变希望改变图像大小,但是不改变宽高比opencv实现opencv中使用co
- 最简单的:<textarea name="A" cols="45" rows="2&
- 数据表中有一列数据,如图所示:现在需要将该列数据分成三列。SQL 代码如下所示:第一种select max(case when F1%3=1
- 1 输出大写字母、小写字母、大小写字母、数字、大小写字母和数字1.1输出小写:找到小写a(97)到z(122)的的ASCII码,然后转义为字
- FileUpload上传图片(图片不变形) 的实现方法,需要的朋友可以参考下。<style type="text/css&q
- 一、什么是凯撒密码“在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最
- 求字符串中最大的递增子序列数据库环境:SQL SERVER 2005如题,求字符串“abcbklmnodfghijkmer”中最大的递增子序
- 相关验证码文章:asp制作验证码的方法 轩魂ASP中文验证码下载 先产生一个4位数的随机码源代码:ychar="0,1,2,3,4
- 前言进程之间通信与线程同步是一个历久弥新的话题,对编程稍有了解应该都知道,但是细说又说不清。一方面除了工作中可能用的比较少,另一方面就是这些
- 最近接触到一个心理学方面的理论:心流理论。大意是一种个人精力完全投注在某件事情上的感觉。心流产生时会有高度的兴奋和充实感。其实也就是说人在进
- 代码共享url: http://code.google.com/p/region-select-js/ 数据已经更新到中国统计局网站中的20