tcl - 如何找到加载包的路径?

Ana*_*and 6 packages tcl

tcl一个人如何找出包的路径装?

% tclsh
% package require csv
Run Code Online (Sandbox Code Playgroud)

我想找出csv加载的路径.

在python中,可以找到使用模块的路径

>>> import os
>>> print os.__file__
'/a/b/python2.2.1/linux26_x86_64/lib/python2.2/os.pyc'
Run Code Online (Sandbox Code Playgroud)

我正在寻找类似的命令 tcl

kos*_*tix 18

事情并非如此简单:Tcl中的包似乎比Python更抽象.

首先,有两种包:"经典"和"模块",它们具有不同的底层机制,用于查找响应package require ...命令加载的内容.

接下来,两种包都能够做任何他们希望提供功能的东西.这意味着他们可以(但不限于):

  • 纯Tcl包,source只需一个Tcl文件或任意数量的文件.
  • 用C或其他编译语言实现的包,它们是动态库的形式,load在需要包时被编辑.
  • 上面的组合,当有一个C库和一层Tcl代码时(通常提供帮助/便利命令).

因此,问题本身没什么意义,因为只有模块由一个自包含的文件表示,但"经典"包可以自由地实现它们自己认为合适.

另一方面,每个包通常(以这种或那种方式)向包子系统提供某些信息,该信息可以使用该package ifneeded命令进行检索(和解析).例如,在我的带有ActiveState Tcl 8.5.x的Windows系统上,我有:

% package require csv
0.7.2
% package ifneeded csv 0.7.2
package provide csv 0.7.2;source -encoding utf-8 {C:/Program Files/Tcl/lib/teapot/package/tcl/teapot/tcl8/8.3/csv-0.7.2.tm}
Run Code Online (Sandbox Code Playgroud)

请注意,package ifneeded返回的只是一个Tcl脚本,它意味着要eval加载包,因此解析这些信息本质上是临时的和脆弱的.

  • 此外,可以安装多个版本的软件包。`package names` 产生一个(未排序的)可用包列表,`package versions $pkg` 产生一个(未排序的)可用包版本列表。_Each_ 有自己的加载器脚本。 (2认同)

小智 7

对于 Tcl 软件包,您可以通过命令查看所有可加载路径目录的列表:

join $::auto_path \n
Run Code Online (Sandbox Code Playgroud)