python的import功能,你需要了解的导入机制

1 基本概念

概念

解释

import

即导入,方式就是在import位置将代码文件拷贝过去。

模块(module)

python中一个.py文件定义为一个模块

常用的几种模块导入方式:

import module_name
import module_name.function_name
import module_name.class_name

from module_name import *

from module_name import func_name,class_name

from module_name import *

(package)

指软件包,包含__init__.py、modules、及子目录等

常用的几种导入方式:

import package_name

import package_name as p

import package.module

import package.module as pm

from package.module import *

from package import module1, module2, module3, ... ...

from package import *

包的导入和模块导入基本一致,只不过导入包时会执行包内的__init__.py。如果只是

导入一个包import package而不指定导入任何模块,且包中的__init__.py文件中没有

其他的初始化操作,那么包下面的模块是无法被自动导入的。

Import导入时搜索路径

装载module代码时python解释器需要先搜索到对应的.py文件,搜索顺序为:

  1. 搜索内存中sys.modules中已经加载好的模块
  2. 搜索python的内置模块
  3. 搜索sys.path路径中的python模块和包
  • sys.path:包含了当前脚本的路径和其他查找包(系统库、第三方库等)的路径,我们也可以在代码中通过sys.path.append()动态添加需要的搜索路径
  • PYTHONPATH查看默认路径,比如Linux下为/usr/local/lib/python/

2 举例介绍

为了形象地解释,我建立了一个test文件夹,其中一个文件夹A打算建立成一个软件包,然后尝试在B文件夹的的run.py文件下导入A包中的模块。

1 在A_B.py中定义__all__用来模糊导入from moduleA import *

python文件中设置了 __all__ 的值,那么则按照 __all__ 指定的子包或者模块进行加载。

举例:定义A_B.py文件,__all__中增加A_B 和C_D函数,不包含E_F函数

在A目录的__init__.py中通过from A_B import *时,E_F函数并不会被导入,上述执行后会报错

2 配置sys.path,在B文件夹的的run.py文件下导入A包中的模块。

在run.py中import A,并执行run.py,发现报错如下:

发现在上面的例子中__init__.py文件执行时并为报错,现在在B文件夹执行run.py就会报错找不到A_B模块,那是因为在执行python文件时在本目录下,或者在上面基本概念介绍时的搜索路径中并未找到A_B模块,所以报错。

当我们在run.py中将A目录增加到sys.path中时,执行正常

import sys
sys.path.append("/Volumes/UNTITLED/test/A")
import A

执行结果:

开始导入A_B模块
使用A_B函数
使用E_F函数

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/299318.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI Earth平台简介

AI Earth地球科学云平台由达摩院-视觉技术实验室打造,基于地球科学智能计算分析方面的创新研究,致力于解决地球科学领域基础性、前沿性、业务性问题,目标成为国内一流的地球科学云计算平台。(摘自官网) 下面&#xff…

C++11(上):新特性讲解

C11新特性讲解 前言1.列表初始化1.1{ }初始化1.2std::initializer_list 2.类型推导2.1 auto2.2 typeid2.3 decltype 3.范围for4.STL的变化4.1新容器4.2容器的新方法 5.右值引用和移动语义5.1 左值引用和右值引用5.2 左值引用与右值引用比较5.3 右值引用的使用场景5.4 右值、左值…

华清远见嵌入式学习——ARM——作业3

作业要求: 代码效果图: 代码: led.h #ifndef __LED_H__ #define __LED_H__#define RCC_GPIO (*(unsigned int *)0x50000a28) #define GPIOE_MODER (*(unsigned int *)0x50006000) #define GPIOF_MODER (*(unsigned int *)0x50007000) #defi…

vue3使用i18n 实现国际化

目录 一、需求 二、实现原理 三、实现步骤 1.安装依赖 vue-i18n 2.配置语言包 3.如何使用 模板中使用 ts动态t函数使用 4.如何切换语言 一、需求 博主最近重构了自己的单页面SSR博客,打算添加国际化功能,众所周知,实现国际化已是一…

Typora图床搭建PicGo+阿里云OSS(免费白嫖)

文章目录 1. 目的2. 方案2.1 Typora2.2 PicGo2.3 阿里云OSS 3. 开始配置3.1 获取KeyId和KeySecret3.2 创建Bucket3.3 配置PicGo3.4 配置Typora 4. 成功结束 1. 目的 本地使用Typora编写markdown文档的时候,文档中的图片路径是本地的。这个时候如果需要将该markdown…

将特定目录添加到 Python 搜索路径

将特定目录添加到 Python 搜索路径 最近在使用青云1000(昇腾310)时,有很多华为提供的第三方库,不是通过pip安装的那些,在使用时不能直接import直接使用,简而言之就是python找不到这些库,下面提供三种措施 1. 使用 sy…

notepad++打开大文件失败问题

问题 :::warning 打开300多兆的日志文件提示文件太大打不开,但是其他版本的能打开 ::: 解决 换版本,没有好办法,换个版本就可以了

JavaWeb后门(webshell)基础

0x00 基础 JSP JSP全称为JavaServer Pages&#xff0c;是一种用于开发支持动态内容的Web页面的技术。它有助于开发人员通过使用特殊的JSP标记在HTML页面中插入Java代码&#xff0c;其中大多数以<&#xff05;开头&#xff0c;以&#xff05;>结尾。Java是一种通用的计算…

实战 9 权限菜单管理

目录 1、权限菜单后端接口 2、查询权限菜单列表 2.1 设计效果图 2.2 menuList.vue 3、 新增权限菜单 3.1 新增权限菜单窗口代码 3.2 选择所属菜单代码 3.3 封装图标选择器 3.4 新增、编辑和删除权限菜单 1、权限菜单后端接口 package com.cizhu.service;import com.ci…

如何将本地websocket发布至公网并实现远程访问服务端

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

苹果发布了一个Ferret(雪貂)多模态大模型,在一个无人问津的角落被一位博主捞起来

苹果12月14日释放了一个名为Ferret的多模态大语言模型&#xff0c;有的翻译是雪貂&#xff0c;有的是法学硕士&#xff0c;要我说&#xff0c;还是叫雪貂吧&#xff0c;接地气亲民&#xff0c;将来犯蠢的时候出来发张雪貂的可爱表情包作公关就完事了&#xff0c;你个法学硕士到…

开源自托管导航页配置服务Dashy本地搭建结合内网穿透远程访问

开源自托管导航页配置服务Dashy本地搭建结合内网穿透远程访问 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一…