taipy run 的 --development 与 --experiment 运行模式怎么选?
【免费下载链接】taipyTurns Data and AI algorithms into production-ready web applications in no time.项目地址: https://gitcode.com/GitHub_Trending/ta/taipy
开发 Taipy 应用时,每次用taipy run启动都会遇到同一个选择:这一次运行是「清掉旧的开发数据重新开始」,还是「把当前应用状态存成一个可以回查的版本」。--development和--experiment这两个互斥参数就是控制这件事的。本文基于仓库中 CLI 参数的定义(taipy/core/_cli/_core_cli.py)、run命令的实现(taipy/common/_cli/_run_cli.py)以及核心测试(tests/core/test_core_cli.py)说明两种模式各自的行为,以及如何选择和验证。
两种模式在做什么
两个参数在_CoreCLI中注册,官方 help 文本对行为的描述是:
--development:以 development 模式运行时,在启动新的 Taipy 应用之前,上一个 development 版本的所有实体都会被删除(When execute Taipy application indevelopmentmode, all entities from the previous development version will be deleted before running new Taipy application)。--experiment [VERSION]:以 experiment 模式运行时,当前 Taipy 应用会被保存到一个新版本。如果版本名已存在,会先检查与当前 Python Config 的兼容性再运行应用;如果不指定版本名,版本号是一个随机字符串。
两者的关键差异,可以直接从测试断言中读出(tests/core/test_core_cli.py):
- 版本号是否变化。development 模式每次运行复用同一个固定的开发版本号(
version_number等于 development version,重复--development运行后版本数不变);而每运行一次--experiment就产生一个新版本,len(_VersionManager._get_all())随之加一(见test_version_number_when_switching_mode)。 - 旧数据是否保留。development 模式再次启动时,上一轮开发版本创建的 scenario、task、data node、job 等实体全部被删除,只剩新版本的数据;而 experiment 模式运行后,旧版本的实体仍然可查(见
test_dev_mode_clean_all_entities_of_the_latest_version)。 - 缺省行为。不带任何模式参数时,
Config.core.mode默认为"development"(taipy/core/config/core_section.py 中_DEFAULT_MODE = "development",test_orchestrator_cli_no_arguments断言了这一点)。也就是说,taipy run app.py不加参数就等价于开发模式。
运行命令怎么写
前置条件:按 INSTALLATION.md 安装 Taipy,例如pip install taipy。安装后taipy命令来自 pyproject.toml 的[project.scripts]入口taipy = "taipy._entrypoint:_entrypoint"。
taipy run的完整用法(来自_RunCLI的参数定义):
taipy run <application_main_file> [--development | --experiment VERSION] [--taipy-force | --taipy-no-force]application_main_file是必填的位置参数,即你的应用主文件(例如main.py)。--development与--experiment属于互斥组,一次只能选一个。--experiment后面可选跟一个版本名(如1.0、2.1)。--taipy-force/--taipy-no-force也互斥:force 用于在版本配置有冲突时强制覆盖并运行(默认 False),--no-force则在任何 Config 冲突存在时停止应用。
需要注意的机制:taipy run本身不直接启动应用,而是用子进程执行[sys.executable, 主文件, ...],并把模式参数加上--taipy-前缀(如--taipy-development)透传给应用进程(见_run_cli.py中的add_taipy_prefix)。另外,参数中写external-args关键字之后的内容会被原样作为外部参数传给应用,不会被加上--taipy-前缀:
taipy run main.py --experiment 1.0 external-args --my-own-flag什么时候选 development,什么时候选 experiment
日常迭代选 development(缺省即可)。开发期间每次改完配置、函数或数据都重启应用时,development 模式会把上一轮开发版本的所有实体清掉再重建,保证你看到的始终是最新一次运行的状态,不会累积历史。测试test_dev_mode_clean_all_entities_of_the_latest_version展示了这一点:先以 development 模式建场景并提交(产生 1 个 scenario、2 个 data node、1 个 job),切到 experiment 模式再建一版,最后切回--development运行——断言显示第一版开发版本的数据全部消失,实体数量回到只有新开发版本的那份。
需要留存一份可回查的快照时选 experiment。例如验证某次配置改动前后的差异、或给一次实验性运行留个存档:
taipy run main.py --experiment不指定版本名时会得到一个随机版本号,每运行一次就多一个版本。如果想让某个版本名在多次运行间保持稳定(比如始终复现1.0这个版本),就显式给出版本名:
taipy run main.py --experiment 1.0此时有一个重要的边界行为:同名 experiment 版本再次运行且当前 Config 与该版本已保存的配置不一致时,应用会直接退出(抛出SystemExit),并在日志中逐条列出配置差异。测试test_modified_config_properties_without_force中断言的日志片段包括:
DATA_NODE "d3" was added JOB "max_nb_of_workers" was added DATA_NODE "d0" was removed DATA_NODE "d2" has attribute "default_path" modified SCENARIO "my_scenario" has attribute "frequency" modified TASK "my_task" has attribute "function" modified遇到这种退出时有两条路:
- 加
--taipy-force强制用当前配置覆盖该版本并继续运行(见test_force_override_experiment_version:修改Config.configure_global_app后,不带 force 再次--experiment 1.0会SystemExit,加上--taipy-force则正常运行); - 或者改用一个新的版本名,让旧版本原样保留。
一个例外:对 job 执行配置的修改(如JOB "mode"、JOB "max_nb_of_workers")只会在日志中记录「was modified / was added」,不会阻止应用启动(见test_modified_job_configuration_dont_block_application_run)。
如何验证版本与模式
版本管理有独立的manage-versions子命令(taipy/core/_version/_cli/_version_cli.py),用来核对当前各版本的模式归属:
taipy manage-versions --list输出为表格,列包括Version number、Mode、Creation date,最新的版本会带(latest)标记。Mode 列显示Development或Experiment(Enterprise 版还会出现Production,见 core_section.py 中mode参数说明:可选值为development、experiment,Enterprise 版另有production)。测试test_list_versions断言了该表格的列结构与 Development/Experiment/latest 的标注逻辑。
对比两个版本的配置差异:
taipy manage-versions --compare-config 1.0 2.0测试中期望的输出形如(来自 tests/core/_version/test_version_cli.py 的断言内容,属测试示例):
Differences between version 1.0 Configuration and version 2.0 Configuration: DATA_NODE "d2" has attribute "default_path" modified: foo.csv -> bar.csv不需要的版本可以删除:
taipy manage-versions --delete 1.0注意副作用:--delete会删除该版本及其关联实体,不可恢复;成功后日志为Successfully delete version 1.0.。删除不存在的版本会报错Version 'xxx' does not exist.。另外还有--rename OLD_VERSION NEW_VERSION用于重命名版本,若新名字已被占用会报Version name 'xxx' is already used.。
不想用命令行参数时
这两个 CLI 参数最终写入的是 CORE 配置节的mode与version_number键(见_CoreCLI.handle_command)。因此也可以在应用代码里用等价的方式固定行为:
Config.configure_core(mode="experiment", version_number="1.0", force=False)configure_core的文档(core_section.py)明确了两点:version_number在 development 模式下会被忽略;force为 True 时即使配置有冲突也覆盖运行。命令行参数适合临时切换,代码里写死则适合固定部署形态。
选择小结
- 改代码、改配置的日常开发:用
taipy run main.py(缺省)或显式--development,接受「每次启动清空上一轮开发版本」的行为; - 要留存一次运行对应的应用与实体快照:
--experiment,需要版本名跨次复现时写成--experiment 1.0; - 复用同名 experiment 版本但配置已变动:确认差异后加
--taipy-force,或换一个新版本名; - 跑完用
taipy manage-versions --list核对版本模式与 latest 归属,用--compare-config核对两次运行的配置差异。
【免费下载链接】taipyTurns Data and AI algorithms into production-ready web applications in no time.项目地址: https://gitcode.com/GitHub_Trending/ta/taipy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考