2013-03-06 26 views
0

我正在使用安裝在常用文件夾(/ usr/lib64/....)中的NumPy 1.4.1的計算機羣集。因爲我想要使用NumPy 1.7.0,我已經安裝了它/.../myPath,並將export PYTHONPATH=/.../myPath添加到我的.bashrc,使得使用import numpy將自動加載NumPy 1.7.0。這工作正常,除了使用parallel python時的特殊性。加載在每個過程中的正確NumPy的模塊,I修改sys.path,因爲這些過程似乎忽略了$PYTHONPATH變量:如何告訴parallel-python進程在哪個文件夾中搜索模塊?

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模塊。有想法該怎麼解決這個嗎?

+0

對不起,我實際上把完整的路徑放在我的程序中。我只是在這裏用'〜'縮寫來節省空間,但很高興知道'〜'無法正常工作。 (編輯後) – 2013-03-06 17:55:53

回答

1

鑑於從給予一定的包裝用戶和系統正寬度模塊的分化的特殊要求,我會建議在尋找設立virtualenv在運行所有代碼isolated environment(引用鏈接):

sudo pip install virtualenv 
(or, sudo easy_install virtualenv if you don’t use pip) 
(or, easy_install --install-dir ~/site-packages/ virtualenv on a shared host) 
mkdir ~/virtualenvs (a directory for your isolated environments) 
virtualenv ~/virtualenvs/mysite.com --no-site-packages 
(--no-site-packages isolates your environment from the main site-packages directory) 
cd ~/virtualenvs/mysite.com/bin 
source activate (activates your new environment) 

這將有助於節省路徑注入的需求。

+0

這是我正在尋找的解決方法,比修改sys.path更清潔。 – 2013-03-07 11:40:43

相關問題