2015-03-06 1 views
1

J'essaie d'importer certains de mes modules personnels dans mes clusters IPython. J'utilise Anacondas sous Windows Vista 64 bitsComment importer des modules dans des clusters IPython

from IPython.parallel import Client 

rc = Client() 

dview = rc[:]  

with dview.sync_imports(): 
    import lib.rf 

Il me donne cette erreur:

No module named 'lib.rf' 

Je peux importer le module dans le reste de mon ordinateur portable IPython, comme je l'ai ce fichier .bat pour commencer portable ipython:

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

J'utilise ce code similaire pour commencer mes groupes ip:

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

Pourquoi cela ne fonctionne-t-il pas?

Plus d'infos:

Si j'imprimer sys.path, je reçois une liste qui contient C: \ Users \ workspace Jon \ \ bf

Si j'imprimer les chemins de mes groupes, je obtenir la même liste:

%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]: 

Une analyse plus poussée:

%px lib.__path__ 

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


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

On dirait que le ipcluster et noteboo k regardent lib dans différents endroits. J'ai essayé de renommer lib en mylib. Cela n'a pas aidé.

+0

Je pense que j'ai corrigé cela en utilisant conda pour mettre IPython à jour – Ginger

Répondre

1

Il semble que with dview.sync_imports() soit en cours d'exécution ailleurs que dans votre environnement IPython Notebook et repose donc sur un PYTHONPATH différent. Il n'est définitivement pas exécuté sur l'un des moteurs de cluster et ne s'attend donc pas à ce qu'il exploite vos paramètres de cluster de PYTHONPATH.

Je pense que vous aurez besoin de ce répertoire dans votre PYTHONPATH (pas votre PATH) pour l'environnement python appelant parce que c'est l'emplacement à partir duquel vous importez les modules.

L'impact du bit que vous avez sur la configuration du PYTHONPATH dans le shell DOS à partir duquel vous appelez des ipclusters n'est pas clair pour moi. Je peux voir que l'on pourrait s'attendre à ce que les moteurs soient au courant de votre répertoire, mais je me demande si ce PYTHONPATH est initié à l'environnement à partir duquel vous appelez IPython.parallel.Client.