轻量级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()
相关推荐
dundunmm几秒前
机器学习之scikit-learn(简称 sklearn)
python·算法·机器学习·scikit-learn·sklearn·分类算法
古希腊掌管学习的神几秒前
[机器学习]sklearn入门指南(1)
人工智能·python·算法·机器学习·sklearn
一道微光14 分钟前
Mac的M2芯片运行lightgbm报错,其他python包可用,x86_x64架构运行
开发语言·python·macos
黑客老陈24 分钟前
新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
运维·服务器·前端·网络·安全·web3·xss
正小安29 分钟前
Vite系列课程 | 11. Vite 配置文件中 CSS 配置(Modules 模块化篇)
前端·vite
四口鲸鱼爱吃盐42 分钟前
Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
是娜个二叉树!1 小时前
图像处理基础 | 格式转换.rgb转.jpg 灰度图 python
开发语言·python
互联网杂货铺1 小时前
Postman接口测试:全局变量/接口关联/加密/解密
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman
暴富的Tdy1 小时前
【CryptoJS库AES加密】
前端·javascript·vue.js