找不到来自tcllib的包
我有一个奇怪的问题,我正在使用Fedora20并在我的系统上安装了tcllib 但若我在示例中使用package require uri,我得到了一个响应中找不到的包找不到来自tcllib的包,tcl,fedora,Tcl,Fedora,我有一个奇怪的问题,我正在使用Fedora20并在我的系统上安装了tcllib 但若我在示例中使用package require uri,我得到了一个响应中找不到的包 有人知道这里的问题是什么,或者如何确定是否在包索引中添加了tcllib吗?Tcl通过两种方式查找包:使用auto\u path和使用Tcl::tm::path 1.自动路径——传统机制。 当您执行package require时,包管理器会查看包是否已经存在,或者是否存在从文件系统获取包的说明。如果两者都不是真的,它会要求pack
有人知道这里的问题是什么,或者如何确定是否在包索引中添加了tcllib吗?Tcl通过两种方式查找包:使用
auto\u path
和使用Tcl::tm::path
1.自动路径
——传统机制。
当您执行package require
时,包管理器会查看包是否已经存在,或者是否存在从文件系统获取包的说明。如果两者都不是真的,它会要求package unknown
处理程序加载它(严格来说,它是使用package unknown
命令安装的处理程序)。该处理程序的默认实现通过在auto_路径
上的目录及其直接子目录中查找pkgIndex.tcl
文件来加载包
auto_path
是一个全局变量,包含要搜索的目录的Tcl列表。您可能只需要lappend
找到它的正确位置包
命令来实现。货物的实际装载量
一旦需要一个不存在但其获取指令存在的包,Tcl将简单地eval
这些指令:它们只是一个简单的旧脚本(通常只调用source
和/或load
来完成繁重的工作)
2.Tcl模块——新的(在8.5中)机制。
Tcl模块系统使用不同的搜索系统,该系统由Tcl::tm::path
命令管理。tcl::tm::path list
子命令将告诉您它的位置(老实说,是一个巨大的列表),您可以使用tcl::tm::path add
子命令扩展路径,并添加额外的搜索位置。Tcl模块将整个软件包放在一个文件中(扩展名为.tm
),并具有结构化名称,因此它们可以避免使用单独的pkgIndex.Tcl
文件;TM loader可以根据需要从文件名本身合成包
调用(在所有情况下,这都是通过源代码
完成的;有一些聪明的方法可以将二进制代码打包到文件中,这样就可以加载
了,但它们远远超出了这个答案的范围)
此时,当实际需要包时,您将返回到文件的源代码;无论您使用的是模块还是传统软件包,这一部分都是相同的
模块系统比传统的搜索机制快得多,因为它不需要打开任何文件来确定要做什么:它只使用带有正确选项的glob
。但是,它在如何打包方面没有那么灵活:多文件包(例如,几乎任何你自己制作的东西)不能被制作成模块(当然,不是没有额外的工作)。好吧,我刚刚发现它适用于tcl 8.5,但不适用于8.6第1节第二段,最后一句是“实际加载…”。我想知道故事的其余部分!