RE: Loading packages
- To: mathgroup at smc.vnet.net
- Subject: [mg9527] RE: [mg9516] Loading packages
- From: jmthomas <jmthomas at cybercable.tm.fr>
- Date: Thu, 13 Nov 1997 01:39:56 -0500
- Sender: owner-wri-mathgroup at wolfram.com
The command <<myPackage.m works fine in two situations only: first case: the file myPackage is in your working directory. You can determine your working directory by Directory[], and set it by SetDirectory["myDirectory"]; second case: you have extended the init.m file to be read at kernel initialization, and this file contains instructions to extend $Path in order to include the directory containing "myPackage". Of course, the second case will take you a little more time but will allow you to go through a number of questions that are interesting if you intend to use Mathematica in a customized way: When starting the kernel, an init.m file is read. On my Windows NT system, this init.m file is located in C:\Program Files\Mathematica\Configuration\Kernel. Depending on your operating system, this path might be different, but the HelpBrowser can tell you where this initialization file should be. This is the modified init.m file: (******************) (** User Mathematica initialization file **) If[$UserName=="jmt",Get["C:\\users\\jmt\\Mathematica\\AddOns\\Autoload\\jmt_init.m"]] (** Decide how to display graphics on this machine **) Begin["System`Private`"] (* Hide any symbols which are created *) Which[ $Remote || $ParentLink =!= Null, <<"PSDirect.m", Environment["DISPLAY"] =!= $Failed, <<"Motif.m", $System == "NeXT", <<"NeXT.m", True, <<"Terminal.m" ] End[] (********end of file********) I have only added to the original file the second line: If[$UserName=="jmt",Get["C:\\users\\jmt\\Mathematica\\AddOns\\Autoload\\jmt_init.m"]] I cannot know whether your operating system handles user names, if it's not the case, you can always drop the If and have the file, here jmt_init, read at any startup of the kernel. This file is located somewhere in my user's directory, you could place it anywhere, depending on how your computer is used and how you store your files. This package file is generated by a notebook created using the >If you are using Mathematica 3.x, you can do one of the following: > > 1) Declare the cell containing the package commands to be an > initialization cell. Highlight the cell, then from the Menu commands > select: "Cell", "Properties", "Initialization". Now save the > notebook and when the popup menu says "Auto Save Package" respond with > "Create Auto Save Package". Mathematica will automatically save a copy of the > initialization cell as a package with the .m file extension. The presence of the notebook to generate the package is handy because modifications to the user_init.m file are easier to write. Just make sure the path to the automatic package file is correct, ie is the one you indicated in the kernel init file. This is a part of my user init file: $Path=Join[$Path,FileNames["*","C:\\users\\jmt\\Mathematica\\AddOns",2] ] $Path=Join[$Path, FileNames["*","C:\\users\\jmt\\Mathematica\\ExtraPackages",3]] When read by the kernel init file, it causes to extend $Path to the directories I need to have access via a single <<file command You can of course do the same with $Packages, and so on. Hope this helps. ----------------------------------------------- Jean-Marie THOMAS Conseil et Audit en Ingnierie de Calcul jmthomas at cybercable.tm.fr www.cybercable.tm.fr/~jmthomas ====================== -----Original Message----- From: Steven Wilkinson [SMTP:wilkinson at NKU.EDU] To: mathgroup at smc.vnet.net Sent: Sunday, November 09, 1997 5:05 AM To: mathgroup at smc.vnet.net Subject: [mg9516] Loading packages Mathgroup, I have a problem that I have seen pop up on this list from time to time, but I can't make any of the answers that have appeared work. I can't load the packages I write into Mathematica 3.0 with either Get or Need. One response I saw was given in the following message: >If you are using Mathematica 3.x, you can do one of the following: > > 1) Declare the cell containing the package commands to be an > initialization cell. Highlight the cell, then from the Menu commands > select: "Cell", "Properties", "Initialization". Now save the > notebook and when the popup menu says "Auto Save Package" respond with > "Create Auto Save Package". Mathematica will automatically save a copy of the > initialization cell as a package with the .m file extension. > > OR > > 2) Save the notebook as a package file. You have to manually type in > the file name with the .m file extension in the dialog box > window--selecting the package file type from the drop down menu won't > do it. This method should work in pre Mathematica 3.x versions. But I found > that in some instances with pre Mathematica 3.x versions, there was a bug in > the notebook frontend and it was best just to write the package in a > standard text editor and save it with the .m file extension. > > Dave Harvatin > > On 31 Jul 1997 03:49:25 GMT, "jmt" <jmt at cybercable.tm.fr> wrote: > >>If I write a package, say >> >>BeginPackage["myPackage`"] >>f::usage="f does strictly nothing" >>Begin["Private`"] >>f[_]=Null >>EndPackage[] >>End[] >> >>using an ordinary notebook, I will have to save it, let's say myPackage.nb >>If I read this notebook, using << or Get, the content of the file is not >>evaluated: no "myPackage`" context is happened to $ContextPath. >> >>It I use the command File->Save As Special->Package Format, I'm not asked >>wether I want the file to be either .nb or .m, the standard is .nb I followed instruction set (2) on the above package. When I issued the Get command <<myPackage.m Mathematica responded with the error message Get : : Noopen : Cannot open myPackage.m. What am I doing wrong? Does this error message mean it couldn't find the file "myPackage.m" or that once it found it it couldn't do anything with it? In another response to a similar question that dealt with the Needs command, David Withoff said >The Needs::nocont message is generated when Needs["context"] finds that >"context" is not present in the value of $Packages. Since "context" is >prepended to $Packages as one of the first steps in evaluation of >BeginPackage["context"], the appearance of this message usually means >that BeginPackage["context"] hasn't been evaluated. The first thing >that I would do to solve this problem would be to take a close look at >the .m file with an ordinary text editor. What am I looking for? Steve Wilkinson Northern Kentucky University