小能豆

Python-获取根项目结构的路径

py

我有一个 Python 项目,项目根目录中有一个配置文件。需要在整个项目中的几个不同文件中访问该配置文件。

所以它看起来像:/configuration.conf /A/a.py,/A/B/b.py(当b,a.py访问配置文件时)。

什么是获取项目根目录和配置文件路径的最佳/最简单的方法,而不依赖于我所在的项目内的哪个文件?即不使用../../?可以假设我们知道项目根目录的名称。


阅读 56

收藏
2024-10-12

共1个答案

小能豆

为了可靠地访问配置文件而无需对相对路径进行硬编码../../,您可以使用 Python 的ospathlib模块根据当前脚本的目录动态定位项目根目录。无论项目结构中的哪个文件正在运行,此方法都有效。

您可以按照以下方式操作:

使用方法pathlib(推荐用于 Python 3.4+)

from pathlib import Path

# Assuming the project root is named "your_project_name"
PROJECT_ROOT_NAME = 'your_project_name'

# Get the current file's directory and traverse upwards until the root is found
current_path = Path(__file__).resolve()

# Find the project root by checking parent directories
for parent in current_path.parents:
    if parent.name == PROJECT_ROOT_NAME:
        PROJECT_ROOT = parent
        break

# Define the configuration file path relative to the project root
config_file_path = PROJECT_ROOT / 'configuration.conf'

print(f"Configuration file path: {config_file_path}")

使用方法os(适用于 Python 2.7+)

import os

# Assuming the project root is named "your_project_name"
PROJECT_ROOT_NAME = 'your_project_name'

# Get the directory of the current file
current_dir = os.path.dirname(os.path.abspath(__file__))

# Traverse upwards until the root is found
while os.path.basename(current_dir) != PROJECT_ROOT_NAME:
    current_dir = os.path.dirname(current_dir)

# Define the configuration file path relative to the project root
config_file_path = os.path.join(current_dir, 'configuration.conf')

print(f"Configuration file path: {config_file_path}")

工作原理

  1. 这两种方法首先确定当前文件的绝对路径(__file__)并解析它以避免符号链接。
  2. 然后,他们遍历父目录,根据已知名称找到项目根目录。
  3. 一旦找到根目录,它们就会动态构建配置文件的路径,使其独立于当前工作目录。

通过使用这些方法,您可以确保您的代码能够从项目中的任何脚本中可靠地找到配置文件,而无需担心../../-style 相对路径。

2024-10-12