TRAE历史版本下载参考(2026年7月更新)

📅 2026/8/2 20:08:14
TRAE历史版本下载参考(2026年7月更新)
7月更新3.3.81开始换成积分制,不友好,用完没法使用最后一个3.3.80版本是2.3.59356下载链接:https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/2.3.59356/win32/Trae_CN-Setup-x64.exe新代码,用于寻找版本import sys import requests from concurrent.futures import ThreadPoolExecutor, as_completed import threading import time import os import json # https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/2.3.62837/win32/Trae_CN-Setup-x64.exe base_url https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/{version}/win32/Trae_CN-Setup-x64.exe file_lock threading.Lock() counter_lock threading.Lock() progress_lock threading.Lock() found_count 0 checked_count 0 PROGRESS_FILE trae_scan_progress.json RESULT_FILE trae_available_versions.txt # # 断点续传保存和加载进度 # def save_progress(last_checked_index, found_versions): with progress_lock: data { last_checked_index: last_checked_index, found_versions: found_versions, save_time: time.strftime(%Y-%m-%d %H:%M:%S) } with open(PROGRESS_FILE, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2) def load_progress(): if os.path.exists(PROGRESS_FILE): with open(PROGRESS_FILE, r, encodingutf-8) as f: data json.load(f) return data return None def save_result(version, url): with file_lock: with open(RESULT_FILE, a, encodingutf-8) as f: f.write(f{version} {url}\n) # # 检测单个版本 # def check_version(version): url base_url.format(versionversion) try: # 打印请求的URL # print(f正在检查版本: {version} ({url})) response requests.head(url, timeout5, allow_redirectsTrue) if response.status_code 200: return (version, url, True) return (version, url, False) except: return (version, url, False) # # 生成版本列表从新到旧 # def generate_versions(): versions [] # 可以自己调整 # 2.3.62837 → 2.3.58 for patch in range(62839, 27281, -1): versions.append(f2.3.{patch}) # # 2.3.62837 → 2.3.0 # for patch in range(62839, -1, -1): # versions.append(f2.3.{patch}) # # 2.2.MAX → 2.2.0 # for patch in range(70000, -1, -1): # versions.append(f2.2.{patch}) # # 2.1.MAX → 2.1.0 # for patch in range(70000, -1, -1): # versions.append(f2.1.{patch}) # # 2.0.MAX → 2.0.0 # for patch in range(70000, -1, -1): # versions.append(f2.0.{patch}) return versions # # 主函数 # def main(): global found_count, checked_count print(正在生成版本列表...) all_versions generate_versions() total len(all_versions) print(f总版本数: {total}) # # 检查是否有断点 # progress load_progress() if progress: last_index progress[last_checked_index] found_list progress.get(found_versions, []) save_time progress.get(save_time, 未知) print(f\n{*50}) print(f发现上次中断的进度) print(f 上次保存时间: {save_time}) print(f 上次扫描到第: {last_index}/{total}) print(f 上次已找到: {len(found_list)} 个版本) print(f 剩余: {total - last_index} 个版本) print(f{*50}) choice input(\n是否继续上次的扫描(y继续 / n从头开始): ).strip().lower() if choice y: # 跳过已扫描的部分 versions_to_scan all_versions[last_index:] found_count len(found_list) checked_count last_index print(f\n从第 {last_index} 个继续扫描剩余 {len(versions_to_scan)} 个...) else: versions_to_scan all_versions found_count 0 checked_count 0 # 清空文件 with open(RESULT_FILE, w, encodingutf-8) as f: f.write( Trae CN 可用版本扫描结果 \n) f.write(f扫描范围: 2.3.62837 ~ 2.0.0从新到旧\n) f.write(f开始时间: {time.strftime(%Y-%m-%d %H:%M:%S)}\n) f.write( * 50 \n) if os.path.exists(PROGRESS_FILE): os.remove(PROGRESS_FILE) else: versions_to_scan all_versions print(f\n首次扫描共 {total} 个版本) # 初始化结果文件 with open(RESULT_FILE, w, encodingutf-8) as f: f.write( Trae CN 可用版本扫描结果 \n) f.write(f扫描范围: 2.3.62837 ~ 2.0.0从新到旧\n) f.write(f开始时间: {time.strftime(%Y-%m-%d %H:%M:%S)}\n) f.write( * 50 \n) print(f使用 50 线程加速...) print(f支持 CtrlC 随时中断下次运行自动续传\n) available_versions [] start_time time.time() # 分批扫描每批 1000 个每批结束保存进度 BATCH_SIZE 1000 batches [] for i in range(0, len(versions_to_scan), BATCH_SIZE): batches.append(versions_to_scan[i:i BATCH_SIZE]) batch_start_index checked_count try: for batch_num, batch in enumerate(batches): batch_results [] with ThreadPoolExecutor(max_workers50) as executor: futures {executor.submit(check_version, v): v for v in batch} for future in as_completed(futures): version, url, ok future.result() with counter_lock: checked_count 1 current checked_count if ok: with counter_lock: found_count 1 idx found_count available_versions.append((version, url)) batch_results.append(version) save_result(version, url) elapsed time.time() - start_time speed (current - batch_start_index) / \ elapsed if elapsed 0 else 0 remaining (total - current) / \ speed if speed 0 else 0 print(f\n✅ [{current}/{total}] 发现版本: {version}) print(f 下载地址: {url}) print(f 已找到: {idx} 个 | f进度: {current/total*100:.1f}% | f速度: {speed:.0f}/秒 | f剩余: {remaining/60:.0f}分钟) else: if current % 200 0: elapsed time.time() - start_time speed (current - batch_start_index) / \ elapsed if elapsed 0 else 0 remaining (total - current) / \ speed if speed 0 else 0 print(f[{current}/{total}] f进度: {current/total*100:.1f}% | f速度: {speed:.0f}/秒 | f已找到: {found_count} | f剩余: {remaining/60:.0f}分钟, flushTrue) # 每批结束保存进度断点 save_progress(checked_count, [v for v, _ in available_versions]) except KeyboardInterrupt: print(f\n\n⚠️ 用户中断保存进度中...) # # 输出结果 # elapsed time.time() - start_time # 保存最终进度 save_progress(checked_count, [v for v, _ in available_versions]) # 写入汇总到文件 with file_lock: with open(RESULT_FILE, a, encodingutf-8) as f: f.write(\n * 50 \n) f.write(f扫描结束时间: {time.strftime(%Y-%m-%d %H:%M:%S)}\n) f.write(f共扫描 {checked_count}/{total} 个版本\n) f.write(f共找到 {len(available_versions)} 个可用版本\n) f.write(f耗时: {elapsed/60:.1f} 分钟\n) f.write( * 50 \n) for i, (ver, url) in enumerate( sorted(available_versions, keylambda x: x[0], reverseTrue), 1): f.write(f{i}. {ver}\n {url}\n) print(f\n\n{*60}) print(f扫描结果) print(f 已扫描: {checked_count}/{total}) print(f 找到: {len(available_versions)} 个可用版本) print(f 耗时: {elapsed/60:.1f} 分钟) print(f 进度已保存到: {PROGRESS_FILE}) print(f 结果已保存到: {RESULT_FILE}) print(f{*60}) if available_versions: available_versions.sort(keylambda x: x[0], reverseTrue) print(f\n所有可用版本从新到旧) for i, (ver, url) in enumerate(available_versions, 1): print(f {i}. {ver}) print(f {url}) else: print(\n本次未找到新的可用版本) if checked_count total: print(f\n 下次运行将自动从第 {checked_count} 个继续扫描) if __name__ __main__: main()多余的版本记录保存到了gittee:https://gitee.com/anyphasy/trae-history-builds----------------------------------------分割线(下面是旧文章)---------------https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/{此处替换为版本号}/win32/Trae%20CN-Setup-x64.exeb比如版本号为1.0.11939那么链接为https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/1.0.11939/win32/Trae%20CN-Setup-x64.exe有关版本日期参考官网更新日志更新日志 - 文档 - Trae CNhttps://docs.trae.cn/ide_changelog目前最新可下载版本号如下1.0.12490 //最新截止4月29日 1.0.12470 1.0.12467 1.0.12457 1.0.12453 1.0.12385 1.0.12366 1.0.12354 1.0.12297 1.0.12284 1.0.12261 1.0.12236 1.0.12227 1.0.12118 1.0.12101 1.0.12006 1.0.11999 //对应4月22日版本 1.0.11959 1.0.11951 1.0.11939 1.0.11924 1.0.11911 1.0.11902 1.0.11896 1.0.11884 1.0.11873 1.0.11868 1.0.11849 1.0.11583 //对应4月16日版本相关的ping代码import requests from urllib.parse import quote import time base_url https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/{version}/win32/Trae%20CN-Setup-x64.exe def check_version(url): try: response requests.head(url, timeout5) return response.status_code 200 except Exception as e: print(f请求失败: {str(e)}) return False def main(): # 从1.0.12384开始递减 major, minor, patch 1, 0, 12491 # 开始版本号 available_versions [] while patch 0: # 设置最小版本号限制 version f{major}.{minor}.{patch} encoded_version quote(version, safe) url base_url.format(versionencoded_version) print(f正在检测版本: {version}, end\r, flushTrue) if check_version(url): print(f\n发现可下载版本: {version}) print(f下载地址: {url}) available_versions.append(url) patch - 1 if patch 12480: # 这里调节结束版本号,否则难以停止,得在任务管理器手动结束进程 break time.sleep(0.5) # 降低请求频率 print(\n\n检测完成以下是所有可下载版本) for i, url in enumerate(available_versions, 1): print(f{i}. {url}) if __name__ __main__: print(开始检测可用版本...) main()运行结果