我正在尝试部署测试版的软件包,并希望现有代码能够运行稳定版本。
Tcl 8.5 / 8.6中的内置包版本控制应该可以用于此目的。但是我遇到了以下非常奇怪的行为,其中加载pkgIndex.tcl文件的顺序将影响最终加载的包。即使“包首选”是“稳定”,我也可以加载一个不稳定的包。
我在多个Tcl版本,8.5和8.6以及不同的Tcl启用工具中尝试了这个。一切行为都相似。
以下代码按预期工作:
% package prefer
stable
% package ifneeded p 1.1 {package provide p 1.1}
% package ifneeded p 1.2 {package provide p 1.2}
% package ifneeded p 1.3 {package provide p 1.3}
% package ifneeded p 1.4a1 {package provide p 1.4a1}
% package versions p
1.1 1.2 1.3 1.4a1
% package require p
1.3
但是当“package ifneeded”语句以不同的顺序运行时,会加载不稳定版本:
% package forget p
% package prefer
stable
% package ifneeded p 1.4a1 {package provide p 1.4a1}
% package ifneeded p 1.3 {package provide p 1.3}
% package ifneeded p 1.2 {package provide p 1.2}
% package ifneeded p 1.1 {package provide p 1.1}
% package versions p
1.4a1 1.3 1.2 1.1
% package require p
1.4a1
这种行为有什么解释?我可以阻止它,或者当我将库路径附加到auto_path时,我是否必须非常小心?