首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >tcl -如何找到加载包的路径?

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

Stack Overflow用户
提问于 2012-05-31 00:05:00
回答 3查看 16.1K关注 0票数 9

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

代码语言:javascript
运行
复制
% tclsh
% package require csv

我想找出加载csv的路径。

在python中,可以使用find the path of a module

代码语言:javascript
运行
复制
>>> import os
>>> print os.__file__
'/a/b/python2.2.1/linux26_x86_64/lib/python2.2/os.pyc'

我正在寻找tcl中类似的命令

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-31 01:37:12

这并不简单: Tcl中的包似乎比Python中的包更抽象。

首先,有两种类型的包:"classic“和"modules",它们有不同的底层机制来查找响应package require ...命令要加载的内容。

接下来,这两种类型的包都能够做它们想要提供的功能。这意味着它们可以是(但不限于):

  • 纯Tcl包,仅包含一个Tcl文件或用C或其他编译语言实现的任意数量的files.
  • Packages,它们是动态库的形式,当需要包时,动态库将被load
  • 当它周围有C库和Tcl代码层(通常提供帮助/方便的命令)时,它是以上的组合。

因此,这个问题本身没有什么意义,因为只有模块恰好由一个自包含的文件表示,但是“经典”包可以自由地实现它们自己。

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

代码语言:javascript
运行
复制
% 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更新以加载包,因此对此信息的解析必然是固有的即席和脆弱。

票数 21
EN

Stack Overflow用户

发布于 2017-03-27 07:16:24

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

代码语言:javascript
运行
复制
join $::auto_path \n
票数 4
EN

Stack Overflow用户

发布于 2019-05-25 00:01:29

本手册介绍了auto_path和其他可装入库变量:https://www.systutorials.com/docs/linux/man/n-auto_path/可以在tclsh: lappend auto_path /new_directoty中添加新的或缺少的可装入软件包搜索目录

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10820025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档