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 和 notebook 正在不同的地方查看 lib。我尝试将 lib 重命名为 mylib。它没有帮助。

4

1 回答 1

1

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

我想你需要在你的 PYTHONPATH (不是你的 PATH )中有那个目录来调用python 环境,因为那是你导入模块的位置。

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

于 2015-06-10T23:44:47.860 回答