在tcl
中如何找出加载包的路径?
% tclsh
% package require csv
我想找出加载csv
的路径。
在python中,可以使用
find the path of a module>>> import os
>>> print os.__file__
'/a/b/python2.2.1/linux26_x86_64/lib/python2.2/os.pyc'
我在tcl
答案 0 :(得分:15)
这并不是那么简单:Tcl中的包似乎比Python更抽象。
首先,有两种软件包:“经典”和"modules",它们具有不同的底层机制,可以找到响应package require ...
命令加载的内容。
接下来,两种包都能够做任何他们希望提供功能的东西。这意味着它们可以(但不限于):
source
只有一个Tcl文件或任意数量的文件。load
。因此,问题本身没什么意义,因为只有模块由一个自包含文件表示,但“经典”包可以自由地实现自己。
另一方面,每个包通常(以这种或那种方式)向包子系统提供某些信息,可以使用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}
请注意,package ifneeded
返回的只是一个 Tcl脚本,它意味着eval
用于加载包,因此解析此信息必定是本质上是临时的和脆弱的。
答案 1 :(得分:2)
对于Tcl包,您可以通过命令查看所有可加载路径目录的列表:
join $::auto_path \n
答案 2 :(得分:0)
本手册介绍了auto_path和其他可加载的库变量:https://www.systutorials.com/docs/linux/man/n-auto_path/ 可以在tclsh中添加新的或缺少的可装入软件包搜索目录: 附加auto_path / new_directoty