python小课堂15 - 史上最详细的包和模块import讲解篇

前言

在大量的代码设计中,我们不可能将所有代码都写在一个.py文件,所以有了包、模块,而为了代码可以重复利用(复用性),就有了类、函数的概念。类和函数在下次介绍。

python中的包

python中的包,对应到计算机中,可以理解为文件夹,但是文件加下必须有一个名为__init__.py的文件,若没有此文件,python则会认为其只是一个普通的文件夹。

打开pycharm,创建一个包,如下:

python中的模块

python中的模块就非常好理解了,实际上,之前所有的.py文件,我们都可以称之为一个模块。单独的一个py文件就是一个模块。

test1和test2不同区别就是test2是和package这个包是同级目录,而test1是属于package包的。

再来看下总的概念:

包和模块的引入

1.模块处于同级目录(并且不在包下 )

当我们想在一个模块中使用另一个模块中的变量时,如何操作呢?test2、test3处于同一级目录。

我想在test3中引入test2的变量,test2.py中有个变量a = 2。

如上所示,只需要在当前模块,用import语句,即可导入模块,具体使用的时候需要用模块的名字.变量。

import 后面必须是模块的名称! ------> import modul name

还有一种写法如下图pycharm中:

如上所示,只需要在当前模块, from 模块名字 import 变量

2.模块处于同级目录(在同一包下)

来看下,test1,test4都属于package包下的模块。

test1.py中有着字符串a = 'I am success!'

在test4.py中引用test1.py中的a,如何引用呢?

可以看到如下:

关键语法:import 包名.模块名 as 别名

但是!!!!!!!如果我们脱离pycharm,找到本机相应的python目录,通过cmd来运行下,看下效果如何:

可以清晰的看到上图,通过命令行模式执行就会报错!错误显示模块没有被找到:没有模块叫'package'。这是为什么呢?在pycharm中通过右键run as运行test4,可以看到控制台成功输出,而本地调用命令行的形式就报错了!

打开pycharm的setting,搜索 python console,右侧其中有一项,add content roots to pythonpath,默认pycharm是勾选上此项的。此项的意思是将内容的根路径加到python的环境变量路径下。

可以看到上图下面代码块里写着一堆代码,正是这段代码,我们才可以在pycharm中正确运行。

我们可以在test1.py里来看下sys.path,顺便打印看下结果。

pycharm控制台输出:

['F:\\pycharm\\python14\\package', 'F:\\pycharm\\python14',

'D:\\python3.6\\python36.zip',

'D:\\python3.6\\DLLs', 'D:\\python3.6\\lib', 'D:\\python3.6',

'C:\\Users\\sy\\AppData\\Roaming\\Python\\Python36\\site-packages',

'D:\\python3.6\\lib\\site-packages',

'D:\\python3.6\\lib\\site-packages\\win32',

'D:\\python3.6\\lib\\site-packages\\win32\\lib',

'D:\\python3.6\\lib\\site-packages\\Pythonwin']

实际通过命令行输出,应该没有'F:\pycharm\python14' 这一项,因为这一项是pycharm中setting自动加上的!

实际控制台输出:

['F:\\pycharm\\python14\\package',

'D:\\python3.6\\python36.zip',

'D:\\python3.6\\DLLs', 'D:\\python3.6\\lib', 'D:\\python3.6',

'C:\\Users\\sy\\AppData\\Roaming\\Python\\Python36\\site-packages',

'D:\\python3.6\\lib\\site-packages',

'D:\\python3.6\\lib\\site-packages\\win32',

'D:\\python3.6\\lib\\site-packages\\win32\\lib',

'D:\\python3.6\\lib\\site-packages\\Pythonwin']

sys.path是一个list。默然情况下python导入文件或者模块的话,他会先在sys.path里找模块的路径。如果没有的话,程序就会报错。可以看到,sys路径下有package的包名,而没有test4.py中引用test1.py模块。

而pycharm能够成功运行,正是因为它已经帮我们把项目的根路径添加到了python的环境变量中。所以我们仿照其类似写法也可以完成!

解决方案:

这里不得不说几个重要的python自带模块了,如下:

__file__ : python模块自身的名称 pycharm打印下__file__:

可以看到pycharm会将模块的绝对路径输出到控制台上。

在用命令行执行下看看:

python额外小知识:可以看到上图有一个__pycache__的文件夹,这个文件夹在pycharm的目录中,我们是看不到的,那么此文件夹的意义何在呢?点进去看下:

python导入同级包_python小课堂15 - 史上最详细的包和模块import讲解篇相关推荐

  1. python 引入同一路径的类_python小课堂15 - 史上最详细的包和模块import讲解篇

    python小课堂15 - 史上最详细的包和模块import讲解篇 前言 在大量的代码设计中,我们不可能将所有代码都写在一个.py文件,所以有了包.模块,而为了代码可以重复利用(复用性),就有了类.函 ...

  2. 【python小课堂专栏】python小课堂15 - 史上最详细的包和模块import讲解篇

    python小课堂15 - 史上最详细的包和模块import讲解篇 前言 在大量的代码设计中,我们不可能将所有代码都写在一个.py文件,所以有了包.模块,而为了代码可以重复利用(复用性),就有了类.函 ...

  3. python 快乐数判断_Python小课堂 习题答案和讲解

    Python小课堂 第三课 之 手敲代码 逐步熟悉下编程开发 测试题目 (1)如何启动IDLE?在Windows中的操作是这样的 : 点击"开始"➡️搜索框输入IDLE,点击回车, ...

  4. python乘法表运算_Python入门教程(三):史上最全的Numpy计算函数总结,建议收藏!...

    点击上方 蓝字 关注我们 Numpy提供了灵活的.静态类型的.可编译的程序接口口来优化数组的计算,也被称作向量操作,因此在Python数据科学界Numpy显得尤为重要.Numpy的向量操作是通过通用函 ...

  5. 发布/上传Jar包到Maven中央仓库 - 史上最详细

    发布 Jar 包到 Maven 中央仓库 在项目开发过程中,我们常常会使用 Maven / Gradle 从仓库拉取开源的第三方 jar 包,可能是私有仓库,可能是 Maven 中央仓库,也可能是第三 ...

  6. python导入同级目录 上级目录文件

    pycharm不会将当前文件目录自动加入自己的sourse_path.右键make_directory as-->Sources Root将当前工作的文件夹加入source_path就可以了. ...

  7. python导入上级目录_Python导入上一级/下一级/任一级目录下的.py文件问题

    有如下目录: -python ----file1 ---------file1_1 ------------------pfile1_1.py ---------pfile1.py ----file2 ...

  8. 3分钟入门python_3分钟学完Python,直接从入门到精通「史上最强干货库」

    作为帅气小编,我已经把python一些模块的甩在这儿了qwq,只要你拿到这些干货,包你玩转python,直接冲向"大佬"的段位,如果已经学了C或者C++或者说如果你需要你的一段关键 ...

  9. Python爬虫人工智能大数据全栈视频史上最全合辑教程分享!

    Python爬虫人工智能大数据全栈视频史上最全合辑教程分享! 毫无疑问Python是这两年最火的编程语言,不仅容易上手,且在多个行业都可应用.尤其今年人工智能及大数据的发展,Python将会展现更多的 ...

最新文章

  1. 计算机代码坑人小程序bat,批处理写的关机小程序--bat
  2. 自己动手写C语言编译器(5)
  3. amuse ui(web插件,js插件,css样式)?
  4. 测试你的开源 IQ 答案
  5. 数据结构:平衡二叉树概念、旋转
  6. bash 的相关配置
  7. mapper-reducer word count 实例
  8. 交叉驰豫的影响因素_墨点对uv打印机印刷质量影响
  9. ExtAspNet应用技巧(十) - Grid导出为Excel文件(续)
  10. 如何在Mac上恢复格式化的相机卡
  11. 关于session应用(2)--JAVA中怎么使用session
  12. linux系统 nvme驱动模块,Linux 5.5最终通过HWMON公开NVMe驱动器温度
  13. ubuntu18.04安装谷歌拼音输入法(Google Pinyin)
  14. ADT下载地址(含各版本),最新ADT-23.0.7
  15. 文献笔记:Contrast-Phys: Unsupervised Video-based Remote Physiological Measurement viaSpatiotemporal Con
  16. ROS下安装和运行SVO数据包和实时测验的过程记录
  17. [Windows] 系统安装利器WinNTSetup4.2 x86/x64 Final单文件版
  18. 水 hdu5208 2015-04-20 21:03 36人阅读 评论(0) 收藏
  19. 计算机主机是什么系统吗,电脑RAM和ROM的区别是什么?RAM和ROM有哪些作用?
  20. css 实现图片轮播

热门文章

  1. 2012年12月第五个周末
  2. 淘宝店铺订单插旗接口(taobao.trade.memo.update淘宝店铺订单交易备注修改接口)代码对接教程
  3. pve 不订阅更新_魔兽世界PVE史:(五)王朝序幕
  4. Controler和RestController注解的区别
  5. 泛微OA-测试环境更新所有密码为1
  6. HTML a 标签的以及 target 属性
  7. C++命名空间:默认命名空间与匿名命名空间
  8. Openresty实战应用(2)
  9. Mac上运行Office就是这么简单
  10. XShell 怎么使用?第一次如何使用XShell连接虚拟机?