2016-09-06 92 views
1

我使用Ubuntu 16.04。我試圖從R運行一個簡單的Python腳本。腳本是Python腳本在bash中工作,但不通過系統從R調用

import numpy as np 
    x=1 
    print(x) 

並寫入一個名爲code.py的文件中。如果我通過

python3.5 code.py 

調用它在bash然而,當我通過

system("python3.5 code.py",intern=TRUE) 

稱之爲R中我得到一個消息,指出numpy的沒有被發現,它工作正常。任何想法爲什麼有這種差異,我怎麼能解決這個問題?

謝謝!

UPDATE

如果我運行

 import sys 
    print(sys.path) 

一個文件,我得到

 [1] "['/home/user/Desktop', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']" 

如果我運行從R上的文件,並

['/home/user/Desktop', '/home/user/anaconda3/lib/python35.zip', '/home/user/anaconda3/lib/python3.5', '/home/user/anaconda3/lib/python3.5/plat-linux', '/home/user/anaconda3/lib/python3.5/lib-dynload', '/home/user/anaconda3/lib/python3.5/site-packages', '/home/user/anaconda3/lib/python3.5/site-packages/Sphinx-1.4.1-py3.5.egg', '/home/user/anaconda3/lib/python3.5/site-packages/setuptools-23.0.0-py3.5.egg'] 

如果我從命令行運行該文件。

+3

將此添加到您的程序中,並查看它是否根據上下文產生不同的輸出:'import sys print(sys.path)' – RPGillespie

+0

它表示Traceback(最近調用最後一次): 文件「test.py」,第4行,在中 import numpy as np ImportError:No module named'numpy' [1]「['/ home/user/Desktop','/usr/lib/python35.zip','/ usr/lib /python3.5','/usr/lib/python3.5/plat-x86_64-linux-gnu','/usr/lib/python3.5/lib-dynload','/ usr/local/lib/python3。 5/dist-packages','/ usr/lib/python3/dist-packages'] attr狀態1 – madness

+0

用這兩行創建一個新的python文件。在R和命令行中運行並比較輸出。 – RPGillespie

回答

1

問題是你的計算機上有兩個版本的python3:系統默認(Ubuntu,我假設)和你安裝的(Anaconda3)。

當您從命令行運行它時,您正在使用Anaconda3環境(其中包括numpy和所有其他anaconda模塊)。當你從R運行它時,它不知道使用Anaconda環境,所以它只是使用默認的Python路徑(不包括numpy)。

爲了解決這個問題,利用水蟒蟒調用你的python腳本在R,而不是系統中的一個:

system("/home/user/anaconda3/bin/python3 code.py",intern=TRUE)

或者,你可以在~/.bashrc添加/home/user/anaconda3/bin/PATH環境變量,它選擇系統二進制文件中的anaconda。

+0

謝謝!我使用過系統(「/ home/user/anaconda3/bin/python3 code.py」,intern = TRUE),它起作用! – madness

相關問題