Skip to content

第1部分:环境变量

wiki-bot edited this page Jun 19, 2024 · 3 revisions

SwanLab将会有一些共享环境变量,这都将在SwanLab-Toolkit定义,这意味着引入swankit包时,就可以选择使用这些环境变量。

这些环境变量被存储于swankit/env.py中, 使用枚举类型收集和定义。

访问和使用

变量列表

变量 名称 描述
SWANLAB_SAVE_DIR swanlab全局文件夹保存的路径 默认为用户主目录下的.swanlab文件夹,支持相对路径,但推荐使用绝对路径
SWANLAB_LOG_DIR swanlab解析日志文件保存的路径 默认为当前运行目录的swanlog文件夹,支持相对路径,但推荐使用绝对路径
SWANLAB_MODE swanlab的解析模式 这将涉及操作员注册的回调

代码内访问

为了方便维护,并且保证环境变量的不可改的特性,所以swankit使用枚举类型定义所有的环境变量,部分代码如下:

from enum import Enum
from typing import List


class SwanLabSharedEnv(Enum):
    SWANLAB_FOLDER = "SWANLAB_SAVE_DIR"
    ...

    @classmethod
    def list(cls) -> List[str]:
        ...

并且,可以通过如下方式访问这些共享的环境变量:

from swankit.env import SwanLabSharedEnv

# 拿到 `SWANLAB_SAVE_DIR` 这个环境变量Key
save_dir = SwanLabSharedEnv.SWANLAB_FOLDER.value

assert save_dir == "SWANLAB_SAVE_DIR"

# 存在一个方法可以列出所有的环境变量
envs = SwanLabSharedEnv.list()

不过需要注意的是,上述操作只能拿到环境变量的Key,而不能拿到环境变量的值。如果需要拿到值,则需要使用API

模式

此处对应的是swanlab.initmode参数,在此处作出规定:

from enum import Enum
from typing import List


class SwanLabMode(Enum):
    """
    swanlab的解析模式,枚举类
    """
    DISABLED = "disabled"
    ...

    @classmethod
    def list(cls) -> List[str]:
        ...

同样需要使用.value来获取对应的值:

from swankit.env import SwanLabMode

# 拿到 `disabled` 这个模式
mode = SwanLabMode.DISABLED.value

assert mode == "disabled"

# 存在一个方法可以列出所有的模式
modes = SwanLabMode.list()

使用枚举类型的好处是,可以避免在代码中硬编码,提高代码的可读性和可维护性, 并且如果未来要为每个环境变量增加一些方法、属性等,可以很方便的在枚举类中添加。

API

本部分列出环境的所有api,方便查阅和使用:

API 名称 描述
is_windows 是否为windows系统 分为windows和类unix系统
create_time 获取当前时间 统一为UTC时间
get_save_dir 获取存放swanlab全局文件的文件夹路径 确保路径存在
get_swanlog_dir 获取存放swanlog日志文件的文件夹路径 不保证文件夹是否存在
get_mode 获取当前的swanlab解析模式 如果没有设置,默认为cloud

is_windows

本函数用于判断当前系统是否为windows系统,分为windows和类unix系统——主要是为了区分路径上的差别。

异常

  • OSError: 未知系统错误,此时swanlab运行在未知系统上,这个系统不是windows或者类unix系统。

返回值

  • bool: 返回True表示当前系统为windows系统,返回False表示当前系统为类unix系统。

示例

from swankit.env import is_windows

if is_windows():
    print("当前系统为windows系统")
else:
    print("当前系统为类unix系统")

create_time

本函数用于获取当前时间,是一个符合ISO 8601标准的字符串,时区为UTC时间。

示例

from swankit.env import create_time

print(create_time())  # 类似的格式:2024-06-19T06:19:04.548711+00:00 

get_save_dir

此函数对应环境变量SWANLAB_SAVE_DIR,用于获取存放swanlab全局文件的文件夹路径,执行此函数将自动创建相关文件夹。

出于安全考虑,并不会递归创建文件夹,如果父目录不存在,将会抛出异常FileNotFoundError

异常

返回值

  • str: 返回存放swanlab全局文件的文件夹路径,如果没有设置环境变量,默认为用户主目录下的.swanlab 文件夹,例如/home/user/.swanlab

示例

from swankit.env import get_save_dir

save_dir = get_save_dir()

print(f"存放swanlab全局文件的文件夹路径为:{save_dir}")  # 此时会自动创建文件夹

get_swanlog_dir

此函数对应环境变量SWANLAB_LOG_DIR,用于获取存放swanlog日志文件的文件夹路径,执行此函数将不会自动创建相关文件夹,只是返回路径。

因为disabled模式的存在,所以不会自动创建文件夹,交由上层代码自行处理。

异常

返回值

  • str: 返回存放swanlog日志文件的文件夹路径,如果没有设置环境变量,默认为当前运行目录的swanlog 文件夹,例如/home/user/xxx/swanlog,执行此函数不会自动创建文件夹。

示例

from swankit.env import get_swanlog_dir

swanlog_dir = get_swanlog_dir()

print(f"存放swanlog日志文件的文件夹路径为:{swanlog_dir}")  # 此时不会自动创建文件夹

get_mode

此函数对应环境变量SWANLAB_MODE,用于获取当前的swanlab解析模式,如果没有设置,默认为cloud模式。

异常

返回值

  • str: 返回当前的swanlab解析模式,如果没有设置,默认为cloud模式,为枚举类型模式中的一种。

示例

from swankit.env import get_mode, SwanLabMode

mode = get_mode()

print(f"当前的swanlab解析模式为:{mode}")

assert mode in SwanLabMode.list()

assert mode == SwanLabMode.CLOUD.value