我对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,所有这三个文件都在同一个文件夹下。我怎么能解决它?有人可以帮忙吗?
答案 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文件。