有事会遇到在python代码中导入包错误问题,本文简单对python包的引入做简单介绍

简单说,我认为python导包一共有3种情况,分别是:

要导的包与当前文件在同一层

要导的包在当前文件的底层(就是与当前文件夹同级的文件夹里)

要导的包在当前文件的上层

1、要导的包与当前文件在同一层

use.py

source.py

use.py表示包的调用方,source.py则是被调用方(下面的几种情况同)

这种情况下直接from 文件名 import 函数/类/变量 就行了

如 from source import Source

运行use.py 会成功输出success

要导的包在当前文件的底层

新建一个wrap文件夹,把source.py放进去

这时use.py导入source.py应该是

from wrap.source import Source

如果里面有多层结构,多用几个点就能解决了

要导的包在当前文件的上层

这种情况是最复杂的一种,我们把上面那种情况的source.py和wrap.py换个位置

现在use.py在wrap文件夹里面了,而source.py跑到wrap文件夹外面了

现在use.py要调用source.py应该怎么样调用呢

这时候就需要把文件根目录放入,python包的搜索路径里面。

大家想一想我们调用pip下来的包或者模块的时候,从来都不需要指定什么路径吧,直接使用包名或者模块名就能使用了,比如 import os。

这正是因为pip下来的包或模块所在的文件夹处于python默认的搜索路径里面。py文件import文件的时候,先在当前目录找,找不到就去python的搜索路径里找,因此我们只需要把当前工程的根目录放入python的搜索路径就可以了。

具体操作如下:

在导入我们想导入的包之前,把当前项目的根目录放入python的搜索路径种,这样就能成功导入了。

os.path.dirname(file)

这句的代码的意思是:获取当前文件所在目录的相对路径,当前文件所在文件夹的相对路径就是 **.**了。

os.path.abspath(os.path.dirname(file))

这句代码的意思是把上面获取的相对路径变成绝对路径,我这里是D:\test\wrap,也就是use.py所在文件夹的绝对路径。

os.path.dirname( os.path.abspath(os.path.dirname(file)))

这句代码的意思是获取上面所得到的路径的上一级路径,我这里就得到了D:\test,这个也是我的项目的根路径。

sys.path.insert(0,BASE_DIR)

这句代码表示把BASE_DIR写入到python搜索路径里。

以上写法并非固定,大家根据自己的文件夹结构来写

这样我的D:\test这个路径就加入到python搜索路径中了。

现在我导入Source,只需要这样写 from source import Source,因为source在D:\test目录下,所以能搜索到,同理D:\test的子文件夹里的文件导入方式就可以写出 from wrap.source import Source,注意从插入的根路径开始写路径就行了

python导包路径问题_python的导包问题相关推荐

  1. python中time什么意思_python中time包是什么?

    在python中基础的时间运用,离不开time函数的支持.这些函数为了方便调用集中放在一个地方,叫做time包.有的人会仔细追寻time包的来源,会发现它和C语言有密不可分的关系.下面我们简单介绍ti ...

  2. python导入包的输入法_python 模块和包的导入

    http://www.cnblogs.com/linhaifeng/articles/6379069.html 1,模块 开源模块 https://pypi.python.org/pypi pip/ ...

  3. 用python画微笑脸表情_python画表情包

    python绘表情包 表情包有部分不完美,请读者自行修改! from turtle import* speed(1) pensize(3) setup(400,400) pu() goto(-100, ...

  4. python读取文件路径格式_Python学习笔记读写文件之文件与文件路径

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  5. python中文件路径格式_Python应用-临床路径格式转换

    有这么一个需求:有近1000个临床路径,给的doc格式的文档,里面有文字描述形式的住院流程和表格形式的临床路径表单,现在需要将其中的表格按照模板存为excel格式,导入医院HIS. doc中表格是这样 ...

  6. python数据分析包pandas论文_python数据分析pandas包入门学习(一)pandas数据结构介绍...

    本文参考<利用python进行数据分析>的第五章 pandas入门python 1 pandas数据结构介绍 pandas有两种主要的数据结构:series和DataFrame Serie ...

  7. python 包和模块_Python中的包和模块实例

    一.实例和结果 1)实例的结构和具体的文件: PyPackage │ PyCommonM.py │ __init__.py │ ├─p1Package │ P1M.py │ P1MC.py │ __i ...

  8. Java 扫描并加载包路径下class文件

    背景 用过spring框架之后,有个指定扫描包路径,然后自动实例化一些bean,这个过程还是比较有意思的,抽象一下,即下面三个点 如何扫描包路径下所有的class文件 如何扫描jar包中对应包路径下所 ...

  9. java 加载class文件路径_动手实现MVC: 1. Java 扫描并加载包路径下class文件

    背景 用过spring框架之后,有个指定扫描包路径,然后自动实例化一些bean,这个过程还是比较有意思的,抽象一下,即下面三个点 如何扫描包路径下所有的class文件 如何扫描jar包中对应包路径下所 ...

最新文章

  1. 缩放浏览器不会换行_深入了解现代浏览器之三 - 渲染
  2. python代码大全p-Python5种代码维护工具
  3. oracle12c多个pdb,Oracle 12c 多租户专题|12cR2中PDB内存资源管理
  4. shsh验证服务器,SHSH(Signature HaSH blobs)是由Apple验证服务器根据iOS设备ECID和固件版本产生的一个签名证书...
  5. 【实例记录】在ubuntu上运行python实现与单片机多线程串口通信
  6. 在vue中没有数据的渲染方法
  7. BLAS+BLACS+LAPACK+SCALAPACK安装
  8. 一个报文的路由器之旅_一个报文的路由器之旅
  9. linux打开文件int open,Linux下C语言open函数打开或创建文件与read,write函数详细讲解...
  10. ASP.NET MVC5 之 分部页
  11. python使用pdfminer解析页面内容,得到内容的详细坐标
  12. azure云数据库_Azure中的新弹性数据库
  13. 现代通信原理5.1:信号的希尔伯特变换
  14. 索尼便携式无线服务器,WF-SP900体验报告:2018索尼真无线产品中的顶端存在
  15. VLAN 划分——基于交换机端口划分VLAN
  16. react-native 0.40.0 环境搭建踩坑全记录
  17. 文档服务器 件排名,全国服务器排名
  18. html alert属性可以自定义,Html自定义alert,confirm弹窗
  19. react native 文本只显示两行
  20. vue设置右边距_利用页面布局设置制作工资条(不用函数)

热门文章

  1. 微软开源基于.NET Core的量子开发工具包 QDK
  2. kubernetes 客户端KubeClient使用及常用api
  3. SeaweedFS在.net core下的实践方案
  4. 基于 websocket 实现的 im 实时通讯案例
  5. 好代码是管出来的——.Net Core中的单元测试与代码覆盖率
  6. 创建基于MailKit和MimeKit的.NET基础邮件服务
  7. .NET Core引入性能分析引导优化
  8. 单元测试02:Open-Cover安装与使用
  9. 02-1.CSS边框,边界,布局相关笔记
  10. java单精度实型_Java的八种基本类型及其各种数据类型的相互转换