在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
中类似的命令
发布于 2012-05-31 01:37:12
这并不简单: Tcl中的包似乎比Python中的包更抽象。
首先,有两种类型的包:"classic“和"modules",它们有不同的底层机制来查找响应package require ...
命令要加载的内容。
接下来,这两种类型的包都能够做它们想要提供的功能。这意味着它们可以是(但不限于):
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
更新以加载包,因此对此信息的解析必然是固有的即席和脆弱。
发布于 2017-03-27 07:16:24
对于Tcl包,您可以通过命令查看所有可加载路径目录的列表:
join $::auto_path \n
发布于 2019-05-25 00:01:29
本手册介绍了auto_path和其他可装入库变量:https://www.systutorials.com/docs/linux/man/n-auto_path/可以在tclsh: lappend auto_path /new_directoty中添加新的或缺少的可装入软件包搜索目录
https://stackoverflow.com/questions/10820025
复制相似问题