2012-05-30 83 views

回答

15

這不是簡單的找一個類似的命令:在Tcl的包似乎比一個更抽象的東西在蟒蛇。

首先,有兩種包:「classic」和"modules",它們具有不同的底層機制,用於查找響應package require ...命令加載的內容。

接下來,這兩種包都可以做任何他們希望提供的功能。這意味着它們可以是(但不限於):

  • 純粹的Tcl包,source只有一個Tcl文件或任意數量的文件。
  • 使用C語言或其他編譯語言實現的軟件包,它們是動態庫的形式,當需要軟件包時會得到load
  • 上述的組合,當有一個C庫和一層Tcl代碼(通常提供helper/convenience命令)時。

因此,問題本身沒有什麼意義,因爲只有模塊由恰好一個自包含的文件,但代表的「經典」套餐可以自由地實現自己,因爲他們認爲合適的。另一方面,每個包通常使用這種或那種方式向包子系統提供某些信息,這些信息可以使用命令package ifneeded來檢索(並解析)。例如,我的Windows系統的ActiveState Tcl的8.5.x的,我有:

% 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 uated得到加載的包,所以這些信息的解析必然是固有的,特別脆弱的。

+0

謝謝。 – Anand

+0

+1爲確定。 –

+1

另外,可以安裝多個版本的軟件包。 'package names'產生一個(未排序的)可用包列表,'package versions $ pkg'產生一個可用包的(未排序)列表版本。 _每個_都有自己的加載腳本。 –

0

爲TCL包可以通過命令來查看所有loadedable路徑顯示目錄的列表:對不同類型的程序包的詳細信息

join $::auto_path \n