Загрузка пакета mathematica из пакета

У меня более или менее следующая настройка. В ~/path/to/my/packages у меня есть два пакета package1.m и package2.m. Конспект каждого пакета выглядит, например, так:

BeginPackage["package1`"]
Unprotect@@Names["package1`*"];
ClearAll@@Names["package1`*"];

Begin["`Private`"]

vecNorm[vec_?VectorQ]:=Module[{},Return[Sqrt[vec.vec]]];

End[]
Protect@@Names["package1`*"];
EndPackage[]

Теперь, моя проблема в том, что я хочу использовать vecNorm, определенный в package1.m в package2.m. Как я могу загрузить (безопасно) package1 из package2?

На данный момент я загружаю вручную оба пакета следующим образом:

SetDirectory[StringJoin[NotebookDirectory[], "packages"]];
Needs["package1`"]
Needs["package2`"]

из блокнота, сохраненного в ~/path/to/my. Я хочу загружать вручную только пакет2, который в свою очередь будет автоматически и безопасно загружать пакет1. В общем, мне нужно решение, которое как можно меньше изменяет пути и т.д. системы Mathematica. Какова должна быть лучшая практика для достижения этого?

PS: Под безопасностью я подразумеваю, что в будущем, когда я буду определять package3, который будет также использовать vecNorm и будет загружать package1, конфликтов не будет.

13
задан Dror 5 December 2011 в 12:29
поделиться