【问题标题】:Set up TCL to access tcl libraries设置 TCL 以访问 tcl 库
【发布时间】:2013-01-17 18:38:47
【问题描述】:

我是 TCL 新手,正在努力访问其他模块。 SOURCE 命令帮助我包含了我在 TCL 程序中编写的其他代码。但是,我认为我在访问代码库时遇到了问题。

例如,当我引用一个数学函数时,找不到它。我认为在搜索通过 tchsh85 调用的程序时,我必须做一些事情来包括数学库在我计算机上的位置。

invalid command name "::math::statistics::mv-ols"
None of these directories exist on my computer: info library= C:/Tcl/lib/tcl8.5 auto_path= C:/Tcl/lib/tcl8.5 C:/Tcl/lib c:/tcl/lib/teapot/package/win32-x86_64/lib c:/tcl/lib/teapot/package/tcl/lib tcl library= C:/Tcl/lib/tcl8.5 auto_index= source C:/Tcl/lib/tcl8.5/word.tcl auto_index= source C:/Tcl/lib/tcl8.5/tm.tcl auto_index= source C:/Tcl/lib/tcl8.5/tm.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/parray.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/package.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/word.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/word.tcl auto_index= source C:/Tcl/lib/tcl8.5/package.tcl auto_index= source C:/Tcl/lib/tcl8.5/tm.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/package.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/tm.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/word.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/package.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/package.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/word.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/auto.tcl auto_index= source C:/Tcl/lib/tcl8.5/history.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl auto_index= source C:/Tcl/lib/tcl8.5/tm.tcl auto_index= source C:/Tcl/lib/tcl8.5/tm.tcl auto_index= source C:/Tcl/lib/tcl8.5/safe.tcl

我收到了这个答案: ::math::statistics 是 TCLlib 的一部分。要检查是否已安装,请键入

包需要 tcllib 如果已安装,它会告诉您版本号。如果没有安装,您可以使用 Teacup 为您安装。

我试过代码:

catch {package require nonexistentName}
 package names
puts "[package names]"

我收到了:

Thread logger img::pixmap TclOO tablelist_tile struct::tree opt tcltest img::ico img::pcx struct::set msgcat pngtcl tablelist::common ftp Tclx trsync tdom img::sgi report comm dde Mk4tcl img::sun img::gif img::window textutil cmdline csv img::tga Img img::png Tktable Itk Ttrace tipstack zlibtcl img::base platform fileutil Tk vfs ActiveTcl http tbcload Memchan style struct::graph tablelist treectrl struct::queue img::jpeg activestate::teapot::link img::bmp registry jpegtcl tdomhtml tooltip snit img::ppm struct::stack tcl::tommath img::tiff tls widget struct img::xpm md5 BWidget img::xbm log starkit Tcl Trf tifftcl Itcl img::ps sqlite3 base64 trofs
0.7

我可能不了解 TCL,但在我使用过的其他语言中,有一种方法可以设置目录或文件列表,以便按特定顺序搜索被调用的代码。在我看来,我需要告诉 tclsh85 去哪里看。

我从 ActiveState 下载了 tcl 8.5.13 和 BWidget 1.9.6 我安装了 tcl 并在我的计算机上解压了 BWidget,但它与我的 tcl 程序位于不同的位置。数学是其中的一部分吗?如果没有,我应该下载什么?当我在 Windows Vista 上运行时,我更喜欢只获得一个可执行版本而不是我需要构建的东西。我可以创建 tcl 程序,只要它们是自包含的,或者如果我可以使用 SOURCE,一切都很好。我遇到问题的地方是在我的程序之外调用代码。

我担心需要为我的环境设置 auto_path,因为它现在与我计算机上的任何内容都不对应。

假设我对 tcl 的工作原理一无所知,请回答。我正在尝试自学(在互联网文档和回答问题的人的帮助下)。

谢谢。

【问题讨论】:

    标签: tcl tclsh


    【解决方案1】:

    好的,我试着总结一下你的问题:

    您想知道如何安装所需的软件包。

    您可以使用teacup 安装它们,例如teacup install math::statistics,它应该可以完成这项工作,或者下载tcllib 并安装它。 Tcllib 的安装很简单,应该会自动选择正确的安装路径。要在你的代码中使用库,你只需要package require math::statistics

    您想知道如何在 Tcl 应该查找库的位置添加目录。

    根据是什么类型的lib,有2种可能:

    • 如果有一个名为 pkgIndex.tcl 或 autoIndex 的文件,那么您必须修改 auto_path 变量。这可以通过lappend auto_path path/to/the/files 完成。
    • 如果只有一个以 .tm 结尾的文件,那就有点复杂了:您必须添加正确的父目录。因此,如果您有一个位于 /some/directory/math/statistics.tm 中的 statistics.tm 文件,并且这是 math::statistics 包,那么适当的目录是 /some/directory。您可以使用::tcl::tm::path add /some/directory 添加它。

    这样的事情几乎从不需要,并且因为您成功地安装了 BWidgets,所以 auto_path 应该适合您。请注意,Tcl 使用(与许多其他语言一样,包括 Java、Perl 等)单个 / 作为路径分隔符,而不是通常的窗口 \

    您希望拥有一个可执行文件 是的,这是可能的,但是您应该首先了解如何获取包,需要哪些文件等。单文件 Tcl 分发的技术称为Starkit,非常有用,但您应该已经熟悉 Tcl .

    【讨论】:

    • 请注意teacup 不是Tcl 命令,它是从命令行(开始->运行->cmd)运行的。 teacup update 将安装所有可用的库,但这可能需要一段时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多