Sage 4.7.1 をインストールしましたが、奇妙な問題に遭遇しました。deepcopy() や uniq() などの関数を使用する古いスクリプトの多くは、それらをグローバル名として認識しなくなりました。Pythonモジュールを1つずつインポートすることでこれを修正できましたが、これは非常に面倒です。しかし、コマンドライン Sage インターフェイスを起動すると、コピー モジュールをインポートせずに「list2=deepcopy(list1)」と入力でき、これは正常に機能します。コマンド ライン Sage がグローバル名 'deepcopy' を認識できるのに、同じ名前を使用するスクリプトをロードすると認識されないのはどうしてですか?
おっと、申し訳ありませんが、まだスタックオーバーフローに慣れていません。「sage_4.7.1/sage」と入力してコマンド ライン インターフェイスを起動します。次に、「load jbom.py」と入力して、Python スクリプトで定義したすべての関数をロードします。スクリプトの関数の 1 つを使用する場合、それは数秒間実行され(複雑な関数)、Sageが通常グローバル名として持っている関数(deepcopy、uniqなど)を使用する場所にヒットしますが、何らかの理由で、ロードしたスクリプトは関数が何であるかを知りません. 繰り返しになりますが、前回説明したように、この特定の調査に取り組んでいたときは、私のスクリプト jbom.py が機能していました。
また、「load jbom.py」または「import jbom」を使用しても違いはありません。どちらのメソッドも、スクリプトで定義した関数を取得し (ただし、2 番目のケースでは jbom. を使用する必要があります)、「deepcopy」がグローバル名ではないという同じエラーが発生します。
DSM への返信: 問題の説明が下手で申し訳ありません。最初の行に「import jbom」を含む新しいスクリプト「experiment.py」を作成しました。experiment.py 内の関数を実行すると、jbom.py 内の関数は認識されますが、deepcopy は認識されません。jbom.py を「load jbom.py」として読み込んでみましたが、数か月前と同じように関数を使用できます。それで、これはすべて、インポート/ロードなどを適切に使用せずにスクリプトをレイヤー化することの問題ですか?
解決済み:「from sage.all import *」を jbom.py の先頭に追加したところ、experiment.py を読み込んで jbom.py 関数を呼び出す関数を問題なく実行できるようになりました。インポート/ロードに関するSageのドキュメントから、私が何を間違っていたのか正確にはわかりません。