如何在 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
.
的环境
我正在尝试将我的一些个人模块导入到我的 IPython 集群中。我在 Windows Vista 64 位
上使用 Anacondasfrom 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
.