Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I know that this has been discussed here (How do I clear all user defined symbols?), but my case is somewhat different. How does one unload packages during runtime that were loaded with the start of Mathematica? Occasionally, for deployment reasons, I would like to revert my system to the default state, to check whether a function works in that environment as well. I have a package that starts when Mathematica starts, and it contains some modified system symbols too (e.g. extended usage messages for options). Should I include CleanSlate` in the same init.m file before loading my own package and then later refer to it when I want to return to the default Mathematica state? Would it revert modified System` context symbols too?

At the moment I manually have to edit the init.m to remove package loading and then the kernel must be restarted. This is quite tedious.

share|improve this question

2 Answers 2

up vote 11 down vote accepted

If you want to revert the entire system to some state, then CleanSlate` may be the best option. If you want to unload a few specific packages though, you can use my package PackageManipulations`, available here. It has a function PackageRemove, which does exactly that. It has an accompanying notebook with explanations. Some additional notes on it are in this and this answers. If you want to just clear all the package and sub/package symbols but not Remove them, you can use functions PackageClear and PackageClearComplete from the same package (a disclaimer : the package may contain bugs, although I used it successfully many times)

Note that removing all symbols in the package (and subsequently removing its context) - which is what PackageRemove does and what you seem to ask for - may be unsafe if other packages use some of those symbols, since those symbols in the definitions of symbols in dependent packages would turn to Removed[symbs] and won't be usable any more, in a sutble way. To check that there are no such dependencies, you can use another package I wrote, PackageSymbolsDependencies`, available from the same place (it also has a notebook with explanations and examples).

share|improve this answer

The cleanest possible kernel you can get is starting a kernel only (no front end) with the -noinit option.

math -noinit

The front end will evaluate a lot of code when it connects to the kernel. -noinit prevents the kernel from loading initialization files (init.m). I don't believe you can get to a purer state than this unless you start surgically removing components that are practically built in (Remove, Clear, etc. applied to pre-defined symbols).

share|improve this answer
    
+1 I have a kernel configuration called "SafeMode" that starts with -noinit. I use it whenever testing code for posting or debugging. –  Mr.Wizard Feb 8 '12 at 22:28
    
@Mr.Wizard How did you set up the SafeMode kernel? When I do that and choose Evaluation > Start kernel > SafeMode from under the frontend, no kenel is loaded. –  István Zachar Mar 8 at 10:10
    
@István I use Evaluation > Notebook's Kernel > SafeMode. Please try that and report the result. –  Mr.Wizard Mar 8 at 21:44
    
@Mr.Wizard Ok, so now I figured how to configure and start a kernel, but even if I assign SafeMode to the notebook, and launch it (with correctly passing -noinit), and no other kernel is running than SafeMode ... it still loads my ...\Kernel\init.m. –  István Zachar Mar 8 at 22:45
    
@István I don't know why that would be; perhaps it is version dependent. I suggest you post a Question on the topic. –  Mr.Wizard Mar 9 at 8:58

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.