python xxx.py 和 python -m xxx两种执行方式的使用场景和问题解决

 更新时间:2025年12月30日 09:32:10   作者:达宁214  
本文主要介绍了python xxx.py 和 python -m xxx两种执行方式的使用场景和问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、直接运行脚本方式(python script.py)

工作原理

当你使用 python script.py 直接运行脚本时:
  1. Python解释器将脚本所在的 目录 添加到 sys.path 的 第一位
  2. 脚本被作为 main 模块执行
  3. 导入搜索从脚本所在目录开始,然后是Python标准库路径和已安装包路径

导入机制

  • 当脚本中有 import xxx 语句时,Python会首先在脚本所在目录查找 xxx.py
  • 如果找不到,才会去系统路径中查找
  • 相对导入(如 from . import xxx )在直接运行的脚本中 不起作用 ,因为脚本被视为顶级模块

示例

当你运行 python online/ods/zs/ods_game_role_transfer_analysis_baoliang_fix_df.py 时:
  • sys.path[0] 被设置为 online/ods/zs/
  • import utils.aiform_util 会在 online/ods/zs/utils/ 下查找,而不是项目根目录的 utils/

二、模块方式运行(python -m module)

工作原理

当你使用 python -m module 运行模块时:
  1. Python解释器将 当前工作目录 添加到 sys.path 的第一位
  2. 按照模块导入规则查找并加载指定模块
  3. 将该模块作为 main 执行

导入机制

  • 导入搜索从当前工作目录开始
  • 模块路径使用点号(.)分隔,而不是斜杠(/)
  • 相对导入在这种模式下可以正常工作
  • 包内的 init.py 文件会被正确加载

示例

当你运行 python -m online.ods.zs.ods_game_role_transfer_analysis_baoliang_fix_df 时:
  • sys.path[0] 被设置为当前工作目录(通常是项目根目录)
  • import utils.aiform_util 会在项目根目录的 utils/ 下查找,这符合项目结构

三、两种方式的适用场景

直接运行方式适用于:

  • 独立脚本,不依赖项目结构
  • 简单的单文件程序
  • 临时测试或调试单个文件
  • 脚本中使用绝对导入或已添加系统路径的情况

模块方式适用于:

  • 大型项目中的模块化代码
  • 有复杂导入关系的项目
  • 使用相对导入的代码
  • 需要保持包结构完整性的情况
  • 生产环境部署

四、解决导入问题的方法

对于直接运行方式:

  1. 添加项目根目录到系统路径 :
import sys import os sys.path.insert(0, os.path.abspath(os.path.join (os.path.dirname(__file__), '../../../')))
  1. 使用绝对导入 :明确指定完整导入路径
from develop_python.utils.aiform_util import fetch_all_records
  1. 创建环境变量 :设置 PYTHONPATH 包含项目根目录

对于模块方式:

  1. 正确使用点号 : python -m online.ods.zs.module_name (不带 .py )
  2. 确保工作目录正确 :先 cd 到项目根目录
  3. 确保包结构完整 :每个目录都有 init.py 文件

五、总结与最佳实践

直接运行方式

  • 优点 :简单直观,命令简短
  • 缺点 :容易出现导入问题,不尊重包结构
  • 适用 :简单脚本、快速测试

模块方式

  • 优点 :尊重Python的模块系统,导入更可靠,适合复杂项目
  • 缺点 :命令较长,需要理解模块路径
  • 适用 :生产环境、复杂项目、团队协作

最佳实践

  1. 生产环境优先使用模块方式 : python -m online.ods.zs.module_name
  2. 保持一致的项目结构 :确保每个包都有 init.py
  3. 在项目根目录运行命令 :避免路径混淆
  4. 使用虚拟环境 :隔离项目依赖
  5. 编写可导入的代码 :即使是脚本也应考虑被导入的情况

到此这篇关于python xxx.py 和 python -m xxx两种执行方式的使用场景和问题解决的文章就介绍到这了,更多相关python xxx.py 和 python -m xxx 执行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 经典数字滤波实例

    python 经典数字滤波实例

    今天小编就为大家分享一篇python 经典数字滤波实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python如何解决secure_filename对中文不支持问题

    Python如何解决secure_filename对中文不支持问题

    最近使用到了secure_filename,然后悲剧的发现中文居然不展示出来,本文就详细的介绍一下解决方法,感兴趣的可以了解一下
    2021-07-07
  • 基于Python实现文件处理程序

    基于Python实现文件处理程序

    这篇文章主要为大家详细介绍了如何基于Python实现一个简单的文件处理程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • selenium+python实现登陆QQ邮箱并发送邮件功能

    selenium+python实现登陆QQ邮箱并发送邮件功能

    这篇文章主要介绍了selenium+python实现登陆QQ邮箱并发送邮件功能,本文给大家分享完整实例代码,需要的朋友可以参考下
    2019-12-12
  • Python中Word文件自动化操作小结

    Python中Word文件自动化操作小结

    Python-docx是一个Python库,提供了对Microsoft Word(.docx文件)的读写和修改功能,本文主要介绍了如何使用Python-docx实现Word文件自动化操作,需要的可以参考下
    2024-04-04
  • python中from module import * 的一个坑

    python中from module import * 的一个坑

    from module import *把module中的成员全部导到了当前的global namespace,访问起来就比较方便了。当然,python style一般不建议这么做,因为可能引起name conflict。
    2014-07-07
  • python读取文本中数据并转化为DataFrame的实例

    python读取文本中数据并转化为DataFrame的实例

    下面小编就为大家分享一篇python读取文本中数据并转化为DataFrame的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python编写学生成绩管理系统的逻辑结构及功能实现

    python编写学生成绩管理系统的逻辑结构及功能实现

    这篇文章主要为大家介绍了python编写学生成绩管理系统实现八个功能示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Python实现模拟分割大文件及多线程处理的方法

    Python实现模拟分割大文件及多线程处理的方法

    这篇文章主要介绍了Python实现模拟分割大文件及多线程处理的方法,涉及Python文件读取、分割及多线程相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • Python中数据类dataclass的使用指南

    Python中数据类dataclass的使用指南

    Python 3.7引入了dataclasses模块,其提供的@dataclass装饰器堪称数据类开发的高效编程利器,本文将从基础概念切入,结合实际案例详细拆解@dataclass的核心用法,希望对大家有所帮助
    2025-11-11

最新评论