Python 运行时的目录信息

摘要说明:

在 python 执行过程中,会涉及各种目录信息,了解各种目录的含义和获取方式,可以让我们更好地进行代码控制,并进行相应的处理。

一. 操作场景说明

1. 几个目录和文件

  1. Windows的命令行窗口所在目录 : c:\workspace
  2. python 的解释器执行文件: c:\env\python.exe
  3. python 的源代码启动文件: c:\source\main.py

2. 操作步骤

  1. 在Windows操作系统中,打开一个 Command 命令窗口
  2. CD c:\workspace, 进入目录 c:\workspace
  3. c:\workspace 命令行窗口中, 运行命令: c:\env\python.exe c:\source\main.py

3. 目录信息

在以上python 运行状态下, 需要理解其中存在的3个目录信息,

  1. 当前的工作目录 : c:\workspace\
  2. 当前 Python 系统的安装目录 : c:\env\
  3. 当前 Python 项目的启动根目录 : c:\source\

二. Python 目录的理解和处理

1. 当前的工作目录

  • 内置模块 os , 指的是操作系统,通过 os.getcwd(), 可获得当前运行状态下的工作目录
  • 改变当前工作目录,可用 os.chdir()
  • os 对相对路径的操作,是以当前的工作目录为主目录进行处理的,比如 os.mkdir()

2. 当前项目的启动根目录

  • 在项目启动文件中

通过**file**, 可获得项目启动文件全称文件名

通过 os.path.dirname(file) , 可获得项目启动根目录

  • 在项目任何文件中

通过 sys.argv[0], 可获得项目启动文件全称文件名

通过 os.path.dirname(sys.argv[0]) , 可获得项目启动根目录

  • 当前 Python 项目的启动根目录,将会自动加入到 sys.path 中的第1个查找元素位置,即 sys.path = 项目启动根目录 + 其他 sys.path

  • 大部分情况下,会先进入 python 项目启动文件所在的目录,然后再进行执行;这时,当前工作目录跟项目启动根目录则为同一目录

3. 当前Python系统的安装目录

  • 内置模块 sys, 指的是 python 解释器系统,而不是操作系统
  • 获得当前运行的 python 解释器的全称文件名:sys.executable
  • 获得当前运行的 python 系统的安装目录:os.path.dirname(sys.executable)
  • 获得进行文件,模块查找次序的路径列表:**sys.path,**默认包括启动根目录, python 解释器安装时设定的默认库目录, 环境变量 PYTHONPATH 中定义的路径。

4. 文件和模块的查找顺序

  • 若引用的是纯文件名 ,运行时查找顺序是: 当前文件所在的相同目录 --> 项目启动根目录 --> Python 安装的默认库目录 --> 环境变量 PYTHONPATH --> 操作系统的 path 变量

  • 若引用的是模块名,将不再查找当前文件所在的相同目录,而是直接按路径顺序查找: 项目启动根目录 --> Python 安装的默认库目录 --> 环境变量 PYTHONPATH --> 操作系统的 path 变量

5. sys.path 在PyCharm 中的特殊处理

在实际编码时,有时会单独运行项目中的某个任意 python 文件,而不一定每次都从项目启动文件开始执行。

单独运行某个项目文件时,当前启动根目录将变为单独运行的Python文件所在的目录,而不是项目设计的启动文件所在的启动根目录,这样就有可能造成引用的包或模块查找不到,加载失败。

这是因为项目中的python文件在引用模块时,都是以项目设计的启动根目录为基础进行的相对引用的,而目前这个项目启动根目录不在 sys.path 查找路径列表中,因此造成模块找不到。

但我们在 PyCharm IDE 环境中进行编码调试时, 单独运行某个子目录下的python文件,即使该文件是按项目固定启动根目录进行的模块引用,也没有出现模块引用失败的问题,可以正常运行,这时什么原因?

... ...

这时由于 PyCharm IDE 自身进行了特殊设置和处理。 在 PyCharm 中,可为每一个单独运行的python文件,设置运行时的配置信息: Run 菜单 --> Edit Configurations ..., 其中包含设置项:

  • Add content roots to PYTHONPATH
  • Add source roots to PYTHONPATH

这2个设置项缺省是被选中的。

因此,在 PyCharm IDE 中运行某个单独 python 文件时,sys.path = 当前启动目录 + 源代码根目录(项目的启动根目录) + 其他系统目录信息; 由于项目的启动根目录已被自动加入到了查找路径列表中,因此,该 python 文件单独运行时,按项目启动根目录进行引用的模块可以正常加载。

相关推荐
郭庆汝5 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
思则变8 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
漫谈网络9 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find10 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取11 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector12 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习13 小时前
Python入门Day2
开发语言·python
Vertira13 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉13 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗13 小时前
黑马python(二十四)
开发语言·python