轻量级Python IDE使用(一)——模块导入

1、模块(module):

一般情况下是一个.py为后缀的文件。此外还有.pyo、.pyd、.so、.dll等

moudle能定义函数、类、变量,也能包含可执行的代码。moudle来源有3种:

  • Python内置的模块
  • 第三方模块
  • 自定义模块

2、包(package):

为避免命名冲突,Python引入了按目录组织的模块的方法,称之为包(packege)。包是含有Python模块的文件夹。当一个文件夹下有__init__.py时意味着该文件夹是一个包,其下的多个模块(module)构成一个整体,而这些模块(module)都可通过同一个包(pakege)导入其他代码中。

其中__init__.py文件用于组织包(package),方便管理各个模块之间的引用、控制着包的导入行为。

该文件可以说明内容都不写,即为空文件(为空时,仅仅用import[该包]形式是什么也做不了的),存在即可,相当于一个标记。

但若想使用from packege_1 import * 这种形式的写法需要在__init__.py中加上__all__=['file_a','file_b'] packege_1下有file_a.py和file_b.py,在导入时__init__.py文件将被执行。

调用包操作示例:

在路径 D:\Python\Project\Study 下创建PkgTest包

其内容包括__init__.py、 file_a.py、file_b.py,其中的_pycache_文件夹由python运行时产生。

初始__init__.py为空白文件

file_a.py

python 复制代码
def A():
    print("I am A")

file_b.py

python 复制代码
def B():
    print("I am B")

在 D:\Python\Project\Study 下创建AbsPathTest.py,调用A、B如下:

python 复制代码
import sys,os
PkgTest = os.path.dirname(os.path.abspath('D:\\Python\\Project\\Study\\PkgTest'))

sys.path.append(PkgTest);

from PkgTest import file_a
from PkgTest import file_b
file_a.A()
file_b.B()

如__init__.py中写入如下:

python 复制代码
__all__=['file_a','file_b']

则AbsPathTest.py可使用,如下调用:

python 复制代码
import sys,os
PkgTest = os.path.dirname(os.path.abspath('D:\\Python\\Project\\Study\\PkgTest'))

sys.path.append(PkgTest);

from PkgTest import *
file_a.A()
file_b.B()

3、绝对路径导入

所有的模块import从根节点开始。根节点位置由sys.path中的路径决定,项目的根目录一般自动在sys.path中。如果希望程序能处处执行,需要手动修改sys.path。如上AbsPathTest.py中:

python 复制代码
import sys,os
PkgTest = os.path.dirname(os.path.abspath('D:\\Python\\Project\\Study\\PkgTest'))

sys.path.append(PkgTest);

from PkgTest import *
file_a.A()
file_b.B()

4、相对对路径导入

相对导入语法中的点号表示当前包。如果您想从当前包的父包中导入模块,您可以使用两个点号。

4.1、导入单个py文件

#from . import relative_a 这种方式导入会报错

python 复制代码
#from . import relative_a 这种方式导入会报错
import relative_a
relative_a.A()

relative_a.py代码

python 复制代码
def A():
    print("I am relative_a");

4.1、导入单个包

例如,继续导入PkgTest包

D:\Python\Project\Study\PkgTest_init_.py文件:

python 复制代码
__all__=['file_a','file_b']

from . import PkgC
from . import file_a

D:\Python\Project\Study\PkgTest\PkgC_init_.py文件:

python 复制代码
from . import file_c

file_c.py

python 复制代码
def C():
    print("I am C")

RelativePathTest.py

python 复制代码
#from . import relative_a 这种方式导入会报错
import relative_a

import PkgTest

relative_a.A()

PkgTest.file_a.A()
PkgTest.PkgC.file_c.C()
相关推荐
拾光拾趣录几秒前
for..in 和 Object.keys 的区别:从“遍历对象属性的坑”说起
前端·javascript
檀越剑指大厂6 分钟前
【Python系列】使用 memory_profiler 诊断 Flask 应用内存问题
开发语言·python·flask
OpenTiny社区11 分钟前
把 SearchBox 塞进项目,搜索转化率怒涨 400%?
前端·vue.js·github
WXX_s18 分钟前
【OpenCV篇】OpenCV——03day.图像预处理(2)
人工智能·python·opencv·学习·计算机视觉
编程猪猪侠40 分钟前
Tailwind CSS 自定义工具类与主题配置指南
前端·css
qhd吴飞44 分钟前
mybatis 差异更新法
java·前端·mybatis
YGY Webgis糕手之路1 小时前
OpenLayers 快速入门(九)Extent 介绍
前端·经验分享·笔记·vue·web
患得患失9491 小时前
【前端】【vueDevTools】使用 vueDevTools 插件并修改默认打开编辑器
前端·编辑器
ReturnTrue8681 小时前
Vue路由状态持久化方案,优雅实现记住表单历史搜索记录!
前端·vue.js
UncleKyrie1 小时前
一个浏览器插件帮你查看Figma设计稿代码图片和转码
前端