1

個人用モジュールの一部を IPython クラスターにインポートしようとしています。Windows Vista 64 ビットで Anacondas を使用しています

from IPython.parallel import Client

rc = Client()

dview = rc[:]    

with dview.sync_imports():
    import lib.rf

それは私にこのエラーを与えています:

No module named 'lib.rf'

ipython ノートブックを起動するためのこの .bat ファイルがあるため、IPython ノートブックの残りの部分にモジュールをインポートできます。

cd C:\Users\Jon\workspace\bf
set PYTHONPATH=%PYTHONPATH%;C:\Users\Jon\workspace\bf
C:\Anaconda\envs\p33\scripts\ipython notebook

IP クラスターを開始するために、次のようなコードを使用しています。

cd C:\Users\Jon\workspace\bf    
set PYTHONPATH=%PYTHONPATH%;C:\Users\Jon\workspace\bf
C:\Anaconda\envs\p33\Scripts\ipcluster start --n=7

なぜこれが機能しないのですか?

より詳しい情報:

sys.path を出力すると、C:\Users\Jon\workspace\bf を含むリストが表示されます

クラスターのパスを出力すると、同じリストが得られます。

%px sys.path

['',
 '',
 '',
 'C:\\Anaconda\\envs\\p33\\lib\\site-packages\\distribute-0.6.28-py3.3.egg',
 'C:\\Anaconda\\envs\\p33\\lib\\site-packages\\pykalman-0.9.5-py3.3.egg',
 'C:\\Anaconda\\envs\\p33\\lib\\site-packages\\patsy-0.2.1-py3.3.egg',
 'C:\\Anaconda\\envs\\p33\\lib\\site-packages\\joblib-0.8.3_r1-py3.3.egg',
 'C:\\Users\\Jon\\workspace\\bf',
 'C:\\Users\\Jon\\workspace\\bf\\my_numba',
 'C:\\Anaconda\\envs\\p33\\python33.zip',
 'C:\\Anaconda\\envs\\p33\\DLLs',
 'C:\\Anaconda\\envs\\p33\\lib',
 'C:\\Anaconda\\envs\\p33',
 'C:\\Anaconda\\envs\\p33\\lib\\site-packages',
 'C:\\Anaconda\\envs\\p33\\lib\\site-packages\\Sphinx-1.2.3-py3.3.egg',
 'C:\\Anaconda\\envs\\p33\\lib\\site-packages\\win32',
 'C:\\Anaconda\\envs\\p33\\lib\\site-packages\\win32\\lib',
 'C:\\Anaconda\\envs\\p33\\lib\\site-packages\\Pythonwin',
 'C:\\Anaconda\\envs\\p33\\lib\\site-packages\\runipy-0.1.1-py3.3.egg',
 'C:\\Anaconda\\envs\\p33\\lib\\site-packages\\setuptools-7.0-py3.3.egg',
 'C:\\Anaconda\\envs\\p33\\lib\\site-packages\\IPython\\extensions']

In [45]: 

さらなる分析:

%px lib.__path__

Out[0:11]: _NamespacePath(['C:\\Anaconda\\envs\\p33\\lib\\site-packages\\win32\\lib'])


lib.__path__
Out[57]: ['.\\lib']

ipcluster とノートブックが別の場所で lib を見ているようです。lib の名前を mylib に変更しようとしました。それは助けにはなりませんでした。

4

1 に答える 1

1

with dview.sync_imports()IPython Notebook 環境以外の場所で実行されているため、別の PYTHONPATH に依存しているようです。クラスター エンジンのいずれかで実行されていないことは間違いないため、PYTHONPATH のクラスター設定を活用することは期待できません。

モジュールのインポート元の場所であるため、呼び出し元の python 環境の PYTHONPATH (PATH ではなく) にそのディレクトリが必要になると思います。

ipclusters を呼び出す DOS シェルでの PYTHONPATH の設定に関するビットの影響は、私には明確ではありません。これにより、エンジンにディレクトリについて知らせることが期待されるかもしれませんが、その PYTHONPATH が呼び出し元の環境に初期化されるかどうか疑問に思っていますIPython.parallel.Client

于 2015-06-10T23:44:47.860 に答える