'''`[package] forget`''' removes the regisration information about a package that was supplied via `[package provide]`. ** Synopsis ** '''package forget''' ''?package package ...?'' ** Description ** `[package] forget` does not "undo" what was done by the [package ifneeded%|%script evaluated] in order to [package provide%|%provide] the package, which may be arbirarily complex. In the common case, the effect of loading a package is that a new [namespace] is created to hold the command and variables provided by the package. In this common case, follow up `[package] forget` with `[namespace delete]` to cleanly remove all vestiges of a package from an interpreter. A pure-Tcl package arrange for anything it loads to get unloaded when its namespace is deleted. Here is one way, provided by [RS], to do that: ====== namespace eval ::foo { variable cleanup 0 proc cleanup {} { # do cleanup } trace add variable ::foo::cleanup unset ::foo::cleanup } ====== An extension can take advantage of the delete [callback] slot in `Tcl_CreateObjCmd` to do any cleanup, including unloading of any shared objects. ** Page authors ** [PYK]: [RS]: [schlenk]: <> command | package