PyCharm中目录Directory与包Python Package的区别

PyCharm中目录Directory与包Python Package的区别

一、概念介绍

在介绍目录directory与包package的区别之前,先理解一个概念—模块

模块的定义:本质就是以.py结尾的python文件,模块的目的是为了其他程序进行引用。

目录(Dictionary):

Dictionary在pycharm中就是一个文件夹,放置资源文件,对应于在进行JavaWeb开发时用于放置css/js文件的目录,或者说在进行物体识别时,用来存储背景图像的文件夹。该文件夹其中并不包含_ _ init__.py文件

包(Package):

对于Python package 文件夹而言,与Dictionary不同之处在于其会自动创建__init__.py文件。 
简单的说,python package就是一个目录,其中包括一组模块和一个__init__.py文件。

二、导入模块

导入模块的方法:

1.同级目录下模块的导入

import module_name                          # 把模块下面的所有内容都导入进来了
import module1_name,module2_name
from module_name import *                   # 一般import * 不建议使用
from module_name import m1,m2,m3            # m1为module_name下面的方法或变量
from module_name import logger as logger_a  # 为导入的变量或方法取个别名,引用时直接用别名

2.不同级目录下模块的导入:

import 目录名.模块名     #使用目录名.模块名的方式,其它的与同目录一样。这里的目录是Directory和python package都一样。

3.示例

PyCharm中目录Directory与包Python Package的区别

main.py中导入day51目录下面para_day51.py

import day51.para_day51
day51.para_day51.show_para()
[postsbox post_id=”1967″]

三、导入包

导入包的本质就是执行这个包下面的__init__.py文件

因此我们这里再来看文章开头的提示就不难理解了!common是个Python package包。导入这个包是在__init__.py查找他的属性和方法。但是我们的__init__.py为空。没有get_driver模块的信息。所以会提示有问题。

PyCharm中目录Directory与包Python Package的区别

解决办法:在__init__.py文件中写入get_driver模块的信息

PyCharm中目录Directory与包Python Package的区别

可以看到没有提示告警信息,并且可以通过 . 的方式看到有get_driver这个模块!

同时,可以看到__init__.py文件下的print语句被执行啦。再一次证明了导入包就是执行__init__.py文件!

PyCharm中目录Directory与包Python Package的区别

问题:有小伙伴就要问了,虽然我这个下面提示了。但是执行为什么还是成功了呢?

PyCharm中目录Directory与包Python Package的区别

前面我们说过包其它就是一个目录。看下面导入目录

四、导入目录

意思就是,引入了这个目录,然后我们使用模块时,就在目录里面找。

PyCharm中目录Directory与包Python Package的区别

无法通过 . 来快捷导包

PyCharm中目录Directory与包Python Package的区别

总结区别

总结:说白了,包就是一个目录,只不过通过__init__.py提供模块查找入口。方便导入模块

把模块在__init__.py文件里配置好。导包时就可以通过 . 来快捷导包

原创文章,作者:三酷猫,如若转载,请注明出处:https://www.sankumao.com/3459.html

(0)
上一篇 2022年9月27日 下午1:33
下一篇 2022年9月27日 下午4:50

相关推荐

  • Eclipse配置国内镜像源,加速插件下载

    我们在国内从官网下载Eclipse以及插件非常慢,那么,有没有方法变快呢? 有,那就是使用国内的公开镜像源替换官方源。 更换镜像源 网上找到的国内镜像总结 1.企业贡献:&nbsp…

    2022年10月19日
  • Java基础三:修饰符

    修饰符用来定义类、方法或者变量,通常放在语句的最前端。我们通过下面的例子来说明: 访问修饰符 default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:…

    2022年10月15日
  • c++ pair用法详解

    今天在刷力扣时,遇到一道题: 原题链接:https://leetcode-cn.com/problems/first-unique-character-in-a-string/ 我…

    2022年4月25日
  • eclipse创建maven项目教程

    Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理,是一个自动化构建工具。在最新的 Eclipse 中自带了 Maven,我们打开,Windows->P…

    2022年10月19日
  • python配置pip镜像源 及 国内常用镜像源

    安装后用的是国外镜像源,推荐换成国内镜像源,pip安装包功能会快很多 一、下载时临时指定镜像源 二、持久化配置镜像源 ① Linux下:    &nb…

    2022年9月20日
  • Java+Selenium教程一:环境搭建

    一、谷歌浏览器驱动 1、谷歌各版本下载http://www.chromedownloads.net/chrome64win/ 2、谷歌驱动下载http://npm.taobao.o…

    2022年10月21日
  • make makefile cmake qmake都是什么,有什么区别

    gcc 是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortr…

    2022年12月30日
  • 基于scrapy的redis安装和配置方法

    在定向爬虫的制作过程中,使用分布式爬取技术可以显著提高爬取效率。而 Redis 配合 Scrapy 是实现分布式爬取的基础。 Redis 是一个高性能的 Key-Value 数据库…

    2022年11月13日
  • Python * 、** 解包 与 *args、**kargs详解

    一、*和**解包操作 解包操作可以应用于元组、列表、集合、字典。 *:用于列表、元组、集合 **:用于字典 1.取出列表中的元素 2.收集列表中多余的值 二、*args和**kar…

    2022年10月10日
  • Java MySQL 连接

    一、配置环境 1.下载mysql.jar包 Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connecto…

    2022年10月18日