我正在一个计算机集群上工作,它在通常的文件夹 (/usr/lib64/....) 中安装了 NumPy 1.4.1。因为我想使用 NumPy 1.7.0,所以我已经安装了它/.../myPath
,并添加export PYTHONPATH=/.../myPath
到我的.bashrc
,这样使用import numpy
将自动加载 NumPy 1.7.0。这工作正常,除了使用并行 python时的特殊性。为了在每个进程中加载正确的 NumPy 模块,我修改sys.path
了 ,因为这些进程似乎忽略了该$PYTHONPATH
变量:
import pp
import numpy
def try2():
sys.path.insert(0,'/.../myPath')
import numpy
a=numpy.random.rand(4,4)
return numpy.__version__
print numpy.__version__
job_server = pp.Server(2, ppservers=() )
jobs=[job_server.submit(try2,(),(),("sys",)),job_server.submit(try2,(),(),("sys",))]
for job in jobs:
print job()
输出如所愿:
1.7.0
1.7.0
1.7.0
但是,当我用这样的ndarray
参数调用它时
import pp
import numpy
def try2(a):
sys.path.insert(0,'/.../myPath')
import numpy
return numpy.__version__
print numpy.__version__
a=numpy.random.rand(4,4)
job_server = pp.Server(2, ppservers=() )
jobs=[job_server.submit(try2,(a,),(),("sys",)),job_server.submit(try2,(a,),(),("sys",))]
for job in jobs:
print job()
输出变为
1.7.0
1.4.1
1.4.1
我的解释:子进程一被调用就会收到一个参数,因此在我有机会修改之前numpy.ndarray
搜索一个名为的模块。有想法该怎么解决这个吗?numpy
sys.path