2016-09-06 38 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

相关问题