2015-03-06 3 views
1

Я пытаюсь импортировать некоторые из моих личных модулей в свои IPython Clusters. Я использую анаконду на Windows Vista 64 битаКак импортировать модули в кластеры IPython

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 \ рабочее место \ 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 и noteboo k смотрят на lib в разных местах. Я попытался переименовать lib в mylib. Это не помогло.

+0

Я думаю, что исправил это, используя conda для обновления IPython – Ginger

ответ

1

Кажется, что with dview.sync_imports() запускается где-то, кроме вашей среды ноутбуков IPython, и поэтому полагается на другой PYTHONPATH. Он определенно не запускается на одном из движков кластера, и поэтому не ожидал, что он будет использовать ваши настройки кластера PYTHONPATH.

Я думаю, что вам понадобится иметь этот каталог в вашем PYTHONPATH (не ваш PATH) для , вызывающего среду python, потому что это место, из которого вы импортируете модули.

Влияние бита, которое у вас есть на настройку PYTHONPATH в оболочке DOS, из которой вы вызываете ipclusters, не ясен для меня. Я вижу, что можно было бы ожидать, что это дало двигателям знать о вашем каталоге, но мне интересно, будет ли этот PYTHONPATH инициализирован в среде, из которой вы вызываете IPython.parallel.Client.

Смежные вопросы