关于TCL包裹的问题

时间:2011-08-23 15:01:35

标签: package tcl

我对TCL中的包有疑问

我有一个test1.tcl文件:

package provide hello 0.1.0


set globalVariable 20

test2.tcl中所需的此文件

package require hello 0.1.0

puts $globalVariable

并且pkgIndex.tcl是:

package ifneeded hello 0.1.0 [list source [file join $dir test1.tcl]]

当我执行test2.tcl时,它告诉我,找不到包hello 0.1.0。

我尝试执行pkgIndex.tcl,它告诉我无法读取变量dir,所有这三个文件都在同一个文件夹下。我怎么能解决它?有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

您需要阅读pkg_mkIndex的文档,其中解释了解释器如何寻找要加载的包。简短版本是:

  

将软件包安装为给定目录之一的子目录   通过tcl_pkgPath变量。如果您在其他地方安装包,   那么你必须确保包含该包的目录   auto_path全局变量或其中一个的直接子目录   auto_path中的目录。

答案 1 :(得分:2)

除了Glenn和Jackson回答:Tcl解释器还会查看TCLLIBPATH环境变量,因此将其设置为指向包含该包的目录。更多信息请访问:http://wiki.tcl.tk/1787。我通常将这些行放在我的bash启动文件中:

TCLLIBPATH="$TCLLIBPATH ~/path/to/my/package"
export TCLLIBPATH

答案 2 :(得分:1)

在'test2.tcl'中,在执行package require之前,添加:

lappend auto_path [file dirname [file normalize [info script]]]

然后,Tcl可以在当前目录中查找pkgIndex文件。