如何在 IPython 个集群中导入模块

How to import modules in IPython Clusters

我正在尝试将我的一些个人模块导入到我的 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。它没有帮助。

with dview.sync_imports() 似乎 运行 在您的 IPython Notebook 环境之外的某个地方,因此依赖于不同的 PYTHONPATH。它绝对不是 运行 在其中一个集群引擎上,因此不会期望它利用您的 PYTHONPATH 集群设置。

我想你需要在你的 PYTHONPATH(而不是你的 PATH)中为 calling python 环境设置那个目录,因为那是来自您正在导入模块。

我不清楚您在 DOS shell 中设置 PYTHONPATH 的影响,您从中调用 ipclusters。我可以看到有人可能希望这能让引擎知道你的目录,但我想知道 PYTHONPATH 是否被初始化为你调用 IPython.parallel.Client.

的环境