☰
Python模块与包、全局环境与虚拟环境详解
2026/10/19 2:08:12 网站建设 项目流程

1 模块

1.1 模块概述

  • 在 Python 中,一个.py文件就是一个模块(Module)。
  • 模块中可以包含:变量、函数、类、等很多内容。
  • 通常把能够实现某一特定功能的代码,集中放在一个模块中(模块就类似于一个工具箱)。
  • 模块可以提高代码的可维护性 与 可复用性,还可以避免命名冲突。

1.2 模块的分类

  • Python 中的模块分为三类,分别是:标准库模块、自定义模块、第三方模块。

1.3 创建模块

  • 模块命名注意点
    • 要符合标识符命名规则
    • 模块名(.py文件名)区分大小写
    • 不要与标准库模块同名(一旦同名,Python会优先引入标准库模块)
  • 示例:创建两个模块 order模块和pay模块
    • order.py
    • # 订单最大金额max_order_amount=1000000# 创建订单defcreate_order():print('订单创建成功')# 关闭订单defclose_order():print('订单关闭成功')# 提示函数defshow_info():print('【订单模块】功能')
    • pay.py
    • # 支付超时时间timeout=1800# 微信支付defwechat_pay():print('微信支付成功')# 支付宝支付defalipay_pay():print('支付宝支付成功')# 提示函数defshow_info():print('【支付模块】功能')

1.4 导入模块

  • Python 中导入模块的时,会执行对应模块中的代码。
  • 模块只加载一次,后续再次导入,直接复用缓存。

1.4.1 import 模块名

  • 全部导入,是最简单的导入方式 。
  • 示例
    • # import 模块名importorderimportpayprint(order.max_order_amount)order.create_order()order.close_order()order.show_info()print(pay.timeout)pay.wechat_pay()pay.alipay_pay()pay.show_info()

1.4.2 import 模块名 as 别名

  • 示例
    • # import 模块名 as 别名importorderasoimportpayaspprint(o.max_order_amount)o.create_order()o.close_order()o.show_info()print(p.timeout)p.wechat_pay()p.alipay_pay()p.show_info()

1.4.3 from 模块名 import 具体内容1

  • 示例
    • # from 模块名 import 具体内容1, 具体内容2, ...fromorderimportmax_order_amount,show_infofrompayimportwechat_pay,alipay_payprint(max_order_amount)show_info()wechat_pay()alipay_pay()

1.4.4 from 模块名 import 具体内容1 as 别名1

  • 示例
    • # from 模块名 import 具体内容1 as 别名1, 具体内容2 as 别名2, ...fromorderimportmax_order_amountasmoa,show_infoaso_show_infofrompayimporttimeoutasto,show_infoasp_show_infoprint(moa)print(to)o_show_info()p_show_info()

1.4.5 from 模块名 import *

  • 不建议使用
  • 示例
    • fromorderimport*frompayimport*# 如果出现同名变量或函数,生效的是最后导入的那个模块show_info()show_info()

1.5 all与name

  • 关于__all__:

    • 在 Python 模块中,可通过__all__来控制from 模块 import *(只能控制这种方式的导入)能导入哪些内容。
    • __all__的值可以是:列表、元组。
    • 示例,在order模块中只允许导出create_order和show_info
      • # 订单最大金额max_order_amount=1000000# 创建订单defcreate_order():print('订单创建成功')# 关闭订单defclose_order():print('订单关闭成功')# 提示函数defshow_info():print('【订单模块】功能')__all__=('create_order','show_info')
    • 调用示例,close_order() 调用不到
      • fromorderimport*create_order()show_info()close_order()
  • 关于__name__:

    • __name__是每个 Python 模块(.py文件)都拥有的一个内置变量。
    • 它的具体值取决于模块的运行方式:
      • 作为主程序直接运行,__name__的值是__main__
      • 作为模块被导入到其他程序中运行,__name__的模块的文件名(不带.py)。
    • 示例,pay模块中代码
      • # 订单最大金额max_order_amount=1000000# 创建订单defcreate_order():print('订单创建成功')# 关闭订单defclose_order():print('订单关闭成功')# 提示函数defshow_info():print('【订单模块】功能')print('order模块中 __name__:',__name__)
    • 调用模块代码
      • importorderprint('__name__: ',__name__)

1.6 标准库模块

  • Python 中的模块分为三类,分别是:标准库模块、自定义模块、第三方模块。
  • 标准库模块:随着 Python 一起安装在我们电脑上的那些模块。
  • 有一些标准库模块是用C语言实现的,这些用C语言实现的模块,又称:【内置模块】。
  • 标准库模块保存在Python安装目录中的Lib文件夹中,但内置模块无法在Lib中看到。
  • Python标准库官方文档
  • Python标准库第2部分官方文档
  • 全局模块索引
  • 代码示例
    • importcopy# 拷贝对象(浅拷贝、深拷贝)importos# 操作系统相关操作(文件、文件夹、路径系统层面的操作)importrandom# 随机数相关(生成随机数、随机选择、洗牌)# 上面的copy、os、random是标准库模块中的【非内置模块】,可以通过__file__查看文件位置print(copy.__file__)print(os.__file__)print(random.__file__)# 如下的这些模块,属于内置模块(无法看到具体实现,也没有__file__属性)importtime# 时间相关操作(获取时间、延时、格式化时间等。)importmath# 数学相关(开平方、取绝对值 等等)importsys# Python 解释器相关操作# 创建一个文件夹ifnotos.path.exists('demo'):os.mkdir('demo')# 随机选择一个人names=['张三','李四','王五','李华']print(random.choice(names))# 洗牌names=['张三','李四','王五','李华']random.shuffle(names)print(names)# 休眠time.sleep(2)print('ok')# 获取当前时间print(time.strftime('%H:%M:%S'))print(time.strftime('%p %I:%M:%S'))# 开平方print(math.sqrt(4))# 取绝对值print(math.fabs(-11.2))# 获取Python解释器的版本print(sys.version)

2 包

2.1 概述

  • 包是一种组织模块的方式,包中可以包含:各种模块、子包、其他资源等。
  • 在 Python 中,【包含__init__.py的文件夹】就是一个包(Package)。
  • 我们通常会把【某个特定功能相关的所有模块】放入一个包中。
  • 使用包可以进一步提升代码的:可维护性、可复用性,便于管理大型项目。

2.2 包与模块的关系

  • 一个模块就是一个.py文件 ,包是用来“管理模块”的目录(文件夹)。
  • 一个包中可以有多个模块,也可以有多个子包。

2.3 包的分类

  • Python 中的包分为三类,分别是:标准库包、自定义包、第三方包。

2.4 创建包

  • 包命名注意点:
    • 要符合标识符命名规范。
    • 包名区分大小写(建议全部使用小写字母)
    • 不要与标准库包同名。
  • 创建如下文件结构,由于trade文件中包含了__init__.py文件,所以trade就可以称之为『包』。

2.5 导入包

  • 关于__init__.py文件
    • __init__.py是包的初始化文件,在包被导入时,__init__.py会被自动调用
    • __init__.py中可以编写一些包的初始化逻辑
    • __init__.py中所定义的内容,会被from 包名 import *形式全部引入
    • __init__.py中也可以使用__all__来控制包中的哪些模块可以被from 包名 import *引入

2.5.1 import 包名.模块名

  • 示例代码
    • # import 包名.模块名importtrade.orderimporttrade.pay trade.order.create_order()trade.pay.wechat_pay()

2.5.2 import 包名.模块名 as 别名

  • 示例代码
    • # import 包名.模块名 as 别名importtrade.orderast_oimporttrade.payast_p t_o.create_order()t_p.wechat_pay()

2.5.3 from 包名.模块名 import 具体内容1

  • 示例代码
    • # from 包名.模块名 import 具体内容1fromtrade.orderimportmax_order_amountfromtrade.payimportwechat_pay,alipay_payprint(max_order_amount)wechat_pay()alipay_pay()

2.5.4 from 包名.模块名 import 具体内容 as 别名

  • 示例代码
    • # from 包名.模块名 import 具体内容 as 别名fromtrade.orderimportmax_order_amountasmoa,show_infoaso_show_infofromtrade.payimporttimeoutasto,show_infoasp_show_infoprint(moa)print(to)o_show_info()p_show_info()

2.5.5 from 包名.模块名 import *

  • 示例代码
    • fromtrade.orderimport*fromtrade.payimport*# 如果出现同名变量或函数,生效的是最后导入的那个模块show_info()show_info()

2.5.6 from 包名 import 模块名

  • 示例代码
    • # from 包名 import 模块名fromtradeimportorder,pay order.create_order()pay.wechat_pay()

2.5.7 from 包名 import 模块名 as 别名

  • 示例代码
    • # from 包名 import 模块名 as 别名fromtradeimportorderaso,payasp o.create_order()p.wechat_pay()

2.5.8 from 包名 import *

  • __init.py__
    • print('trade包初始化')a=100b=200fromtradeimportorderfromtradeimportpay# 或者这样写# __all__ = ['order','pay']
  • 调用示例
    • # from 包名 import *fromtradeimport*print('a:',a)print('b:',b)order.create_order()pay.wechat_pay()

2.5.9 import 包名

  • 示例
    • importtradeprint(trade.a)print(trade.b)trade.order.create_order()trade.pay.wechat_pay()

2.6 引入子包

  • 以上引入方式,都可以用于引入子包,只需要在包名的后面跟上子包名即可

  • 创建如下包结构

  • h1目录下__init__.py内容

    • from.helimportsay_hello
  • hel.py内容

    • defsay_hello():print("hello")
  • 调用

    • fromtrade.h1importsay_hello say_hello()

2.7 第三方包

2.7.1 概述

  • PyPI 是是 Python 官方推荐、官方维护的包发布与分发平台。
  • pip是Python包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。
  • pip默认的源是 PyPI,其地址为 ,如果下载比较慢,还可以指定其它的源。
    • 清华大学: https://pypi.tuna.tsinghua.edu.cn/simple
    • 阿里云: https://mirrors.aliyun.com/pypi/simple
    • 中国科技大学: https://pypi.mirrors.ustc.edu.cn/simple

2.7.2 pip常用命令

  • pip install 包名:安装指定的包。
  • python.exe -m pip install numpy:安装指定的包(通过指定Python解释器安装)。
  • pip install -i 镜像地址 包名:临时使用镜像地址安装指定包。
  • pip config set global.index-url 地址:设置 pip 所使用的镜像地址。
  • pip config list:查看当前环境的 pip 配置。
  • pip config unset global.index-url:让 pip 恢复使用官方默认的地址。
  • pip list:列出当前环境中,已安装的所有第三方包。
  • pip uninstall 包名:从当前环境中卸载指定的第三方包。

2.7.3 安装一个第三方包

  • 以安装numpy包为例,以管理员身份打开cmd
    • pip install numpy

2.7.4 全局环境 vs 虚拟环境

  • 什么是环境? 所谓环境就是指:python 解释器 + 依赖包。

  • Python 环境分类两种,分别是全局环境(系统环境)、虚拟环境。

  • 所有项目共用全局环境容易互相影响和干扰,虚拟环境可以解决这个问题,二者结构如下图

    • 图中的 Python 安装目录中的文件,构成了全局环境(系统环境)。
    • 图中的.venv中的文件构成了虚拟环境。
    • 虚拟环境有自己独立的一套:Python 解释器、pip 命令、第三方依赖包,不和其它项目产生干扰。
    • 虚拟环境和全局环境共用的东西,只有标准库。
    • 全局环境目录
    • 虚拟环境目录
  • 在cmd中不做任何处理,直接通过pip安装的包,都是安装在了全局环境中,如果想在虚拟环境中安装包,需要切到虚拟环境目录后,通过activate命令切换到虚拟环境。

2.8 创建全局环境项目

  • 通过 Pycharm 创建项目时,进行如下配置,即可创建全局环境:
  • 结论:基于全局环境的项目,可以使用:全局环境中的第三方包,也可以使用全局的标准库。

2.9 创建虚拟环境项目

  • 通过 Pycharm 创建项目时,进行如下配置,即可创建虚拟环境

  • 给虚拟环境安装第三方包的方式有三种:

  • 通过 cmd 安装

    • 先使用cmd进到虚拟环境的目录的.venv/Scripts/目录下,执行activate命令
    • 再执行命令安装pip install numpy
    • 安装成功
  • 通过 Pycharm 中的命令行窗口安装

    • 打开终端
    • 执行命令安装
    • 执行deactivate可以退出当前虚拟环境。
  • 通过 Pycharm 提供的可视化工具安装

    • 点击右下角
    • 选择解释器设置
    • 点击+号
    • 搜索要安装的软件包,点击安装软件包

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询