多かれ少なかれ以下の設定があります。 ~/path/to/my/packages
には、私は2つのパッケージpackage1.m
とpackage2.m
があります。各パッケージの概要は、例えば、以下の通りです:パッケージ内からmathematicaパッケージをロードする
BeginPackage["package1`"]
[email protected]@Names["package1`*"];
[email protected]@Names["package1`*"];
Begin["`Private`"]
vecNorm[vec_?VectorQ]:=Module[{},Return[Sqrt[vec.vec]]];
End[]
[email protected]@Names["package1`*"];
EndPackage[]
、私の問題は、私はpackage2.m
にpackage1.m
で定義されたvecNorm
を使用したいということです。 package2
から(安全に)package1
をロードするにはどうすればよいですか?
現時点では以下のように、私は手動で両方のパッケージをロードする:
SetDirectory[StringJoin[NotebookDirectory[], "packages"]];
Needs["package1`"]
Needs["package2`"]
を~/path/to/my
に保存されたノートブックから。手動でロードしたいpackage2
これは自動的に安全にロードされます。package1
。一般的に、私は可能な限り少ない経路を変更する解などをmathematicaに求めています。これを達成するためのベストプラクティスは何でしょうか?
PSは:安全にすることで、私は将来的には、ときに私は、同様vecNorm
を使用するpackage3
を定義しますし、同様に競合は起こりませんpackage1
をロードされることを意味します。
あなたの最初の方法は私の問題を解決しました!ありがとう。 2つめは、試してみると、検索パスに問題があり、 'package1'が' package2'を見つけることができないようです。 - 私はこのオプションを自分でも試してみましたが、うまくいきませんでした。 – Dror
@Dror 2番目のメソッドは正常に動作するはずです。そうでなければ、これはMathematicaが見つけられない場所に2番目のパッケージを置いたことを意味するはずです。次に、パッケージをMが見つけられる場所( '$ UserBaseDirectory'など)に移動するか、パッケージを含むディレクトリを' $ Path'変数に追加する必要があります。実際には、両方のインポートメソッドが機能するか、どちらも失敗するはずです。そのため、私はあなたの状況に少し困惑しています。 –
これはすべて共有ディレクトリにあり、私の共同編集者の設定がわからないので、できるだけパスの変更がないような解決策が必要です。実際、2番目の方法ではベースパッケージが見つからないようです。私は確かに困惑している。しかし、解決策があることを幸せにしてください:) – Dror