Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sync_imports()在IPython.parallel引擎上导入自定义模块_Python_Ipython_Ipython Parallel - Fatal编程技术网

使用sync_imports()在IPython.parallel引擎上导入自定义模块

使用sync_imports()在IPython.parallel引擎上导入自定义模块,python,ipython,ipython-parallel,Python,Ipython,Ipython Parallel,我一直在玩IPython.parallel,我想使用自己的一些自定义模块,但未能按照使用dview.sync\u imports()的说明来实现。唯一对我起作用的是 def my_parallel_func(args): 导入系统 sys.path.append('/path/to/my/module') 导入my_模块 #还有其他的 然后主要是为了 如果名称=main: #设置dview。。。 地图(my_parallel_func,my_args) 在我看来,这样做的正确方法是 使用dv

我一直在玩IPython.parallel,我想使用自己的一些自定义模块,但未能按照使用
dview.sync\u imports()
的说明来实现。唯一对我起作用的是

def my_parallel_func(args):
导入系统
sys.path.append('/path/to/my/module')
导入my_模块
#还有其他的
然后主要是为了

如果名称=main:
#设置dview。。。
地图(my_parallel_func,my_args)
在我看来,这样做的正确方法是

使用dview.sync_imports()的
:
导入系统
sys.path.append('/path/to/my/module')
导入my_模块
但这会抛出一个错误,说明没有名为
my_module
的模块


那么,使用
dview.sync_imports()

的正确方法是什么呢?问题是,您只是在运行客户端的本地进程中更改
PYTHONPATH
,而不是在运行
ipcluster
的远程进程中更改

如果运行下一段代码,则可以观察到此行为:

from IPython.parallel import Client

rc = Client()
dview = rc[:]

with dview.sync_imports():
    import sys
    sys.path[:] = ['something']
   
def parallel(x):
    import sys
    return sys.path

print 'Local: ', sys.path
print 'Remote: ', dview.map_sync(parallel, range(1))
基本上,您要与
sync\u导入一起使用的所有模块必须已经在
PYTHONPATH


如果它不在
PYTHONPATH
中,则必须将其添加到远程执行的函数中的路径,然后在函数中导入模块。

对,但sys.path会。更正它!好的,我这样做了,但是由于某些原因,远程引擎没有正确地使用PYTHONPATH。远程引擎从什么环境获取PYTHONPATH?我运行脚本的那个?系统的默认shell?Python配置文件?我运行了你的脚本,PYTHONPATH配置正确,本地导入有效,远程导入无效。@AlexS如何启动远程引擎<代码>ipcluster开始-n 4
?是的,完全正确。通过修改引擎启动脚本top import sys和直接修改sys.path,我成功地解决了这个问题。那么导入工作正常..您的模块在python路径中吗?奇怪:——#提示一下:运行
ipcluster start-n4
的工作目录位于
PYTHONPATH
中。如果所有必需的自定义模块都位于同一目录中,则可以从该目录运行
ipcluster