找不到来自tcllib的包

找不到来自tcllib的包,tcl,fedora,Tcl,Fedora,我有一个奇怪的问题,我正在使用Fedora20并在我的系统上安装了tcllib 但若我在示例中使用package require uri,我得到了一个响应中找不到的包 有人知道这里的问题是什么,或者如何确定是否在包索引中添加了tcllib吗?Tcl通过两种方式查找包:使用auto\u path和使用Tcl::tm::path 1.自动路径——传统机制。 当您执行package require时,包管理器会查看包是否已经存在,或者是否存在从文件系统获取包的说明。如果两者都不是真的,它会要求pack

我有一个奇怪的问题,我正在使用Fedora20并在我的系统上安装了tcllib

但若我在示例中使用package require uri,我得到了一个响应中找不到的包


有人知道这里的问题是什么,或者如何确定是否在包索引中添加了tcllib吗?

Tcl通过两种方式查找包:使用
auto\u path
和使用
Tcl::tm::path

1.
自动路径
——传统机制。 当您执行
package require
时,包管理器会查看包是否已经存在,或者是否存在从文件系统获取包的说明。如果两者都不是真的,它会要求
package unknown
处理程序加载它(严格来说,它是使用
package unknown
命令安装的处理程序)。该处理程序的默认实现通过在
auto_路径
上的目录及其直接子目录中查找
pkgIndex.tcl
文件来加载包

auto_path
是一个全局变量,包含要搜索的目录的Tcl列表。您可能只需要
lappend
找到它的正确位置是一个tcl脚本,它描述了如何使包可用,如果需要,它可以通过调用适当的
命令来实现。货物的实际装载量

一旦需要一个不存在但其获取指令存在的包,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节第二段,最后一句是“实际加载…”。我想知道故事的其余部分!