python的导包问题

摘要:
os路径。abspath代码意味着将上面获得的相对路径更改为绝对路径。这里是D:estwrap,它是使用的文件夹的绝对路径。py位于。系统路径。代码插入指示BASE_ DIR被写入python搜索路径。上述书写方法并不固定。您可以根据自己的文件夹结构进行编写,以便将我的D:est路径添加到python搜索路径中。

有事会遇到在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: estwrap,也就是use.py所在文件夹的绝对路径。

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

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

sys.path.insert(0,BASE_DIR)

这句代码表示把BASE_DIR写入到python搜索路径里。
以上写法并非固定,大家根据自己的文件夹结构来写
这样我的D: est这个路径就加入到python搜索路径中了。
现在我导入Source,只需要这样写 from source import Source,因为source在D: est目录下,所以能搜索到,同理D: est的子文件夹里的文件导入方式就可以写出 from wrap.source import Source,注意从插入的根路径开始写路径就行了

免责声明:文章转载自《python的导包问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# Random生成相同随机数的解决方案在docker中安装宝塔下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解

作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位。那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能。然而这个时候各种各样的问题也就来了,之前网上一直有零零碎碎的移植教程,但是都不完整,或是有这样或者那样的问题。今天刚刚研究成功了Cocos2dx-3.0版本项目的安卓平台移植...

使用Python操作Redis详解

之前的五天,过了个愉快的周末,然后将公司AbaseDump的调度部分代码看懂并且在此之上完成了OnlyDump的功能代码,代码不可以公开,今天完工,明天测试,晚上来总结一下这几天学到的一点应用。 使用Python操作Redis详解 ---------------------------------------------------------------...

python中常用的内置函数和内置模块

一、InnerFuction 内置函数1、type() 返回对象或者变量的数据类型      print(type("嘻嘻"))            #class_str       a=3      print(type(a))                  #class_int 2、abs() 返回数字的绝对值      print(abs(-1...

Misc工具合集

目录 工具安装教程 配置清华源 图片类 F5隐写 outguess stegdetect steghide lsb zsteg bpg BlindWaterMark (盲水印)频域盲水印 gaps montage合并图片 gaps拼图 stegpy 压缩包类crc32.py pyc文件 uncompyle6(pyc文件反编译)...

python打包代码做.exe文件

步骤: 1. pip安装支持的pyinstaller,“pip install pyinstaller”可先看一下底部的报错情况2,预先装好合适版本的pyinstaller 2.准备一段要实现的代码,文件名为loooookfile.py 如下,是实现:将指定路径下的所有文件的完整路径打印出来,之后倒计时10s关闭窗口 1 importos 2 import...

第七章 Python 盒子:模块、包和程序

前戏部分 模块,用一堆(很多行)代码实现了某个功能的代码集合。 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来说,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。 其实模块只是有很多 Python 代码的一个文...