如何在IPython集群中导入模块



我正在尝试将一些个人模块导入我的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:UsersJonworkspacebf
set PYTHONPATH=%PYTHONPATH%;C:UsersJonworkspacebf
C:Anacondaenvsp33scriptsipython notebook

我正在使用这个类似的代码来启动我的ip集群:

cd C:UsersJonworkspacebf    
set PYTHONPATH=%PYTHONPATH%;C:UsersJonworkspacebf
C:Anacondaenvsp33Scriptsipcluster 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。它没有起到任何作用。

with dview.sync_imports()似乎在IPython Notebook环境之外的其他地方运行,因此依赖于不同的PYTHONPATH。它肯定不是在其中一个集群引擎上运行的,所以不要指望它会利用PYTHONPATH的集群设置。

我认为对于调用python环境,您需要在PYTHONPATH(而不是PATH)中有该目录,因为这是导入模块的位置。

我不清楚在DOS shell中设置PYTHONPATH(从中调用ipclusters)的影响。我可以看出,人们可能希望这能让引擎了解您的目录,但我想知道PYTHON帕斯是否会初始化到您调用IPython.parallel.Client的环境中。