假设有如下目录结构:

-- dir0| file1.py| file2.py| dir3| file3.py| dir4| file4.py

dir0文件夹下有file1.py、file2.py两个文件和dir3、dir4两个子文件夹,dir3中有file3.py文件,dir4中有file4.py文件。

1.导入同级模块

python导入同级模块(在同一个文件夹中的py文件)直接导入即可。

import xxx

如在file1.py中想导入file2.py,注意无需加后缀".py":

import file2
#使用file2中函数时需加上前缀"file2.",即:
#file2.fuction_name()

有的时候使用import net 不能正常使用 显示没有该模块 这时候在模块前面加上一个. 表示在同级目录中。

这个时候用

from . import net
from .preprocess import Preprocess

2.导入下级模块

导入下级目录模块也很容易,需在下级目录中新建一个空白的__init__.py文件再导入:

from dirname import xxx
如在file1.py中想导入dir3下的file3.py,首先要在dir3中新建一个空白的__init__.py文件。

-- dir0| file1.py| file2.py| dir3| __init__.py| file3.py| dir4| file4.py

再使用如下语句:

plan A
from dir3 import file3
或是plan B
import dir3.file3
import dir3.file3 as df3

但使用第二种方式则下文需要一直带着路径dir3书写,较为累赘,建议可以另起一个别名。

3.导入上级模块

要导入上级目录下模块,可以使用sys.path:

import sys
sys.path.append("..")
import xxx 

如在file4.py中想引入import上级目录下的file1.py:

import sys
sys.path.append("..")
import file1

sys.path的作用:当使用import语句导入模块时,解释器会搜索当前模块所在目录以及sys.path指定的路径去找需要import的模块,所以这里是直接把上级目录加到了sys.path里。

而且这个时候只需要用一次就行了,不需要在每个模块中都使用,因为上级目录已经加到路径列表中了。

打印一下路径列表

print(sys.path)

“…”的含义:等同于linux里的‘…’,表示当前工作目录的上级目录。实际上python中的‘.’也和linux中一致,表示当前目录。

4.导入隔壁文件夹下的模块

如在file4.py中想引入import在dir3目录下的file3.py。

这其实是前面两个操作的组合,其思路本质上是将上级目录加到sys.path里,再按照对下级目录模块的方式导入。

同样需要被引文件夹也就是dir3下有空的__init__.py文件。

-- dir| file1.py| file2.py| dir3| __init__.py| file3.py| dir4| file4.py

同时也要将上级目录加到sys.path里:

import sys
sys.path.append("..")
from dir3 import file3

5.常见错误及import原理:

在使用直接从上级目录引入模块的操作时:

from .. import xxx
经常会报错:

ValueError: attempted relative import beyond top-level package
这是由于相对导入时,文件夹实质上充当的是package,也就是包的角色(比如我们常用的numpy、pandas都是包)。如果python解释器没有认同该文件夹是package,那么这就是一个普通的文件夹,无法实现相对导入。

文件夹作为package需要满足如下两个条件:

文件夹中必须存在有__init__.py文件,可以为空。
不能作为顶层模块来执行该文件夹中的py文件。

Python-import导入上级 本级 目录文件相关推荐

  1. Python中import导入上一级目录模块及循环import问题的解决

    Python中import导入上一级目录模块及循环import问题的解决 参考文章: (1)Python中import导入上一级目录模块及循环import问题的解决 (2)https://www.cn ...

  2. 【Python】导入资源管理器的文件列表(计算文件和文件夹大小)

    文章目录 1.按照扩展名进行分类 2.导出文件的大小 3.计算文件夹大小 4.分类到字典 5.完整代码及效果 1.按照扩展名进行分类 使用Python查询一个路径下的所有文件可以借助glob模块以及o ...

  3. Python批量导入图片到Word文件

    问题背景:2017年4月应华章公司邀请,翻译一本来自美国的Python入门教材,全书共750页,2018年4月完成翻译交稿,2018年9月责任编辑寄来样稿进行印刷前校对.经过半个月的检查和校对,又进行 ...

  4. python 导入上级/隔壁目录包的方法

    结论:需要在文件前面加上: import os, syssys.path.append(os.getcwd())或者添加你想导入的包所在的文件夹路径例如:import os, syssys.path. ...

  5. python 批量读取xlsx并合并_如何用Python快速导入多个excel文件并合并文件数据

    日常工作中,每个月都会遇到那么个固定的工作,将业务方同事整理的数据导入GP数据库中的某张表中:听起来是很简单的活呢! 但每次业务MM总会发来一个文件夹,里面有三四十个Excel文件(.xlsx格式,且 ...

  6. python——import导入模

    1.import    搜索路径 import   sys sys.path 路径搜索 从上⾯列出的⽬录⾥依次查找要导⼊的模块⽂件 '   '    表示当前路径 程序执⾏时导⼊模块路径 sys.pa ...

  7. Python import导入模块与函数方法 Python语言基础【1】

    1 Python的语言基础 导入模块 在Python代码中导入模块需要使用 import语句语法结果如下 import module_name 使用模块中函数的语法如下 module_name.fun ...

  8. python 无法导入cpython的.pyx文件

    在测试某一项目代码时,出现以下错误: ModuleNotFoundError: No module named 'nms.cpu_nms' 在nms文件夹下存在cpu_nms.pyx文件,但是导入失败 ...

  9. python import自己写的.py文件

    1. 简单地导入自己写的.py文件 参考:https://jingyan.baidu.com/article/08b6a591810daf14a8092204.html 2. 将自己写的多个.py文件 ...

最新文章

  1. C++ 笔记(05)— 变量(变量定义、声明、初始化、extern关键字、变量之间转换)
  2. Redis中有序集合zset数据类型(增加(添加元素)、获取(获取指定范围元素、返回权值在min和max之间的成员、返回成员member的score值)、删除(删除指定元素和指定权值范围的元素))
  3. oracle bom层级sql,oracle bom_tree.sql
  4. php怎么查帮助,需要有关MySQL查询和PHP的帮助
  5. Fvwm-背景图片设置三法
  6. excel表格怎么调整行高和列宽_表格太宽,怎么打印在一页上?这招超简单
  7. python显示语言错误_Python错误和异常
  8. Android中数据库的一些操作(增删改查)
  9. ceshiceshicesoooof
  10. php email 发送,php 发送 Email
  11. c#如何实现在datagridview中加入时间控件、numericupanddown控件
  12. 101.接收上游响应的缓存处理流程
  13. 21天Jmeter打卡day16参数传递token传递,接口关联
  14. 文字围绕浮动元素的妙用(HTML、CSS)
  15. Spring的JdbcTemplate实现分页
  16. 教师个人计算机研修总结,计算机研修总结
  17. tuxedo中间件tmadmin的命令使用
  18. win11开机动画关闭教程
  19. 双路CPU笔记本计算机,什么是双路cpu cpu双路什么意思 - 云骑士一键重装系统
  20. window远程桌面无法复制粘贴文件到本地

热门文章

  1. .iml文件_jetbrains误删maven 项目.iml文件后的处理方法
  2. linux virtualhost不能正常运行,造成网站无法正常运行的4个原因!
  3. linux按日期备份mysql,在Linux、Windows上如何按日期逻辑备份数据库
  4. 基础向:关于异常(Exception)面试常会问到的问题
  5. java定时器 并发_【java多线程与并发库】— 定时器的应用 | 学步园
  6. java 注解与反射_Java注解与反射直接上手
  7. 使java代码更干净_java如何使用Lombok更优雅地编码
  8. php 添加inotify扩展,php inotify 扩展的安装
  9. syslog 向内存中缓存_动画:深入浅出从根上理解 HTTP 缓存机制及原理!
  10. 正面管教php_中联重科团委快乐父母协会第五期正面管教家长基础班招募!