You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过路径导入Python文件并动态加载最新版本代码,兼容多系统

解决方案

原代码核心问题

  • 插入sys.path的路径仅传入了版本文件夹名称,未拼接上层Versions目录,Python解释器无法定位对应路径下的main.py
  • 硬编码路径分隔符/,跨Windows/Linux系统时会出现路径识别错误
  • 未做绝对路径适配,若从非ClockOS目录下启动bootLoader.py,会找不到Versions目录
  • 代码行os.path.dirname('Versions/'+str(latest))没有接收返回值,无实际作用

修复后代码

import os
import re
import sys

# 取bootLoader.py所在的根目录,避免工作目录变化导致路径失效
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
VERSIONS_DIR = os.path.join(BASE_DIR, 'Versions')

versionList = []
for filename in os.listdir(VERSIONS_DIR):
    if filename.startswith('Version'):
        versionList.append(filename)
        print(f"Loaded {filename}")

def major_minor_micro(version):
    major, minor, micro = re.search(r'(\d+)\.(\d+)\.(\d+)', version).groups()
    return int(major), int(minor), int(micro)

latest = max(versionList, key=major_minor_micro)
print("Newest Version: ", latest)

# 拼接跨平台兼容的最新版本目录完整路径
latest_dir = os.path.join(VERSIONS_DIR, latest)
# 插入到sys.path最前,优先匹配该路径下的模块,避免重名冲突
sys.path.insert(0, latest_dir)

# 导入最新版本的main模块
import main

# 如果需要执行main.py中被if __name__ == "__main__"包裹的逻辑,可添加以下代码:
# if __name__ == "__main__":
#     import importlib
#     importlib.reload(main)

适配说明

该方案所有路径拼接均使用os.path.join处理,原生兼容Windows和Linux系统;Python 3.3及以上版本不需要额外添加__init__.py文件即可正常导入,若需兼容Python 2.x,在每个Version x.x.x目录下新增空__init__.py文件即可。

内容的提问来源于stack exchange,提问作者EnderPrince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:24:04