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的tkinter中如何改变label背景颜色

    python的tkinter中如何改变label背景颜色

    在Python的tkinter中,使用config方法的background属性可以改变label的背景颜色
    2024-11-11
  • 在win10和linux上分别安装Python虚拟环境的方法步骤

    在win10和linux上分别安装Python虚拟环境的方法步骤

    这篇文章主要介绍了在win10和linux上分别安装Python虚拟环境的方法步骤,虚机环境有非常多的优点,今天我们用的虚拟环境是virtualenv。感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Python中串口操作的实现示例

    Python中串口操作的实现示例

    本文主要介绍了使用Python的pyserial库进行串口通信,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • 解决pycharm运行程序出现卡住scanning files to index索引的问题

    解决pycharm运行程序出现卡住scanning files to index索引的问题

    今天小编就为大家分享一篇解决pycharm运行程序出现卡住scanning files to index索引的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 详解python数组中的符号...与:符号的不同之处

    详解python数组中的符号...与:符号的不同之处

    这篇文章主要介绍了详解python数组中的符号...与:符号的不同之处,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Django Rest framework之认证的实现代码

    Django Rest framework之认证的实现代码

    这篇文章主要介绍了Django Rest framework之认证的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • 详解Python 字符串相似性的几种度量方法

    详解Python 字符串相似性的几种度量方法

    这篇文章主要介绍了详解Python 字符串相似性的几种度量方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 使用Python实现简单的数据备份

    使用Python实现简单的数据备份

    数据备份,即数据的复制和存储,是指将数据从一个位置复制到另一个位置,以防止原始数据丢失或损坏,下面我们就来了解一下用Python如何实现这一功能吧
    2025-03-03
  • python简单的函数定义和用法实例

    python简单的函数定义和用法实例

    这篇文章主要介绍了python简单的函数定义和用法,实例分析了Python自定义函数及其使用方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • python中的PywebIO模块制作一个数据大屏

    python中的PywebIO模块制作一个数据大屏

    这篇文章主要介绍了python中的PywebIO模块制作一个数据大屏,一个制作数据大屏的工具,非常的好用,100行的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解,需要的朋友可以参考一下
    2022-03-03

最新评论