python 导入 rpy2.robjects 从 apache 网络请求调用时不起作用
python import rpy2.robjects does not work when called from apache web request
问题:
我的 "C:\Apache24\htdocs\Test\cgi-bin"
文件夹中有一个非常简单的 python 脚本 (Test.py
),其中包含以下代码:
#!/Python/python
print("Content-type: text/html")
print()
import os
os.environ['R_HOME'] = 'C:\Program Files\R\R-3.4.1'
os.environ['R_USER'] = 'C:\Python\Lib\site-packages\rpy2'
# importing rpy2
import rpy2.robjects as robjects
# test : evaluating R code
robjects.r('''
# create a function `f`
f <- function(r, verbose=FALSE) {
if (verbose) {
cat("I am calling f().\n")
}
2 * pi * r
}
''')
r_f = robjects.r['f']
res = r_f(3)
print(res[0])
现在在 python shell 中执行它时它工作得很好。但是,从 Web 请求(甚至本地主机)调用脚本只会无限期地加载页面。
附加信息:
我正在通过 RemoteDesktopConnection 开发 Windows Server 2008 R2 x64 OS
我的安装如下:
Python 3.6: "C:\Python" + rpy2 version: 2.8.6
R 3.4.1: "C:\Program Files\R\R-3.4.1"
Apache: "C:\Apache24"
import os
和 os.environ['...
命令是我根据 this post 设置的,因为我无法使用全局系统变量设置它。
但是我设置了环境变量(我可以在 cmd.exe 中启动 R),但是我的 rpy2 将无法工作(即使在 python shell 中)以上命令。
我的系统变量是:
Path: "...;C:\Python\Scripts\;C:\Python\;C:\Program Files\R\R-3.4.1\bin\x64"
R_HOME: "C:\Program Files\R\R-3.4.1"
R_USER: "C:\Python\Lib\site-packages\rpy2"
我知道我的 apache 服务器可以执行 python 脚本作为 cgi(我有其他 python 脚本可以通过网络请求执行得很好)。实际上只是 import rpy2.robjects 命令造成了麻烦
我在搜索解决方案时找到了 ,但我对服务器配置了解不多,如果没有更详细的解释,我将无法做某事。
让我知道是否可以提供更多详细信息。
如有任何帮助,我们将不胜感激!
显然这是最 obvious/stupid 发生的事情。在我的 python 脚本中使用正斜杠而不是反斜杠确实解决了我的问题。所以我更新后的代码如下所示:
#!/Python/python
print("Content-type: text/html")
print()
import os
os.environ['PYTHONHOME'] = 'C:/Python'
os.environ['PYTHONPATH'] = 'C:/Python/lib/site-packages'
os.environ['R_HOME'] = 'C:/Program Files/R/R-3.4.1'
os.environ['R_USER'] = 'C:/Python/Lib/site-packages/rpy2'
# importing rpy2
import rpy2.robjects as robjects
# test : evaluating R code
robjects.r('''
# create a function `f`
f <- function(r, verbose=FALSE) {
if (verbose) {
cat("I am calling f().\n")
}
2 * pi * r
}
''')
r_f = robjects.r['f']
res = r_f(3)
print(res[0])
当通过网络请求调用时,此脚本按照预期的方式执行。
问题:
我的 "C:\Apache24\htdocs\Test\cgi-bin"
文件夹中有一个非常简单的 python 脚本 (Test.py
),其中包含以下代码:
#!/Python/python
print("Content-type: text/html")
print()
import os
os.environ['R_HOME'] = 'C:\Program Files\R\R-3.4.1'
os.environ['R_USER'] = 'C:\Python\Lib\site-packages\rpy2'
# importing rpy2
import rpy2.robjects as robjects
# test : evaluating R code
robjects.r('''
# create a function `f`
f <- function(r, verbose=FALSE) {
if (verbose) {
cat("I am calling f().\n")
}
2 * pi * r
}
''')
r_f = robjects.r['f']
res = r_f(3)
print(res[0])
现在在 python shell 中执行它时它工作得很好。但是,从 Web 请求(甚至本地主机)调用脚本只会无限期地加载页面。
附加信息:
我正在通过 RemoteDesktopConnection 开发 Windows Server 2008 R2 x64 OS
我的安装如下:
Python 3.6: "C:\Python" + rpy2 version: 2.8.6
R 3.4.1: "C:\Program Files\R\R-3.4.1"
Apache: "C:\Apache24"
import os
和 os.environ['...
命令是我根据 this post 设置的,因为我无法使用全局系统变量设置它。
但是我设置了环境变量(我可以在 cmd.exe 中启动 R),但是我的 rpy2 将无法工作(即使在 python shell 中)以上命令。
我的系统变量是:
Path: "...;C:\Python\Scripts\;C:\Python\;C:\Program Files\R\R-3.4.1\bin\x64"
R_HOME: "C:\Program Files\R\R-3.4.1"
R_USER: "C:\Python\Lib\site-packages\rpy2"
我知道我的 apache 服务器可以执行 python 脚本作为 cgi(我有其他 python 脚本可以通过网络请求执行得很好)。实际上只是 import rpy2.robjects 命令造成了麻烦
我在搜索解决方案时找到了
让我知道是否可以提供更多详细信息。
如有任何帮助,我们将不胜感激!
显然这是最 obvious/stupid 发生的事情。在我的 python 脚本中使用正斜杠而不是反斜杠确实解决了我的问题。所以我更新后的代码如下所示:
#!/Python/python
print("Content-type: text/html")
print()
import os
os.environ['PYTHONHOME'] = 'C:/Python'
os.environ['PYTHONPATH'] = 'C:/Python/lib/site-packages'
os.environ['R_HOME'] = 'C:/Program Files/R/R-3.4.1'
os.environ['R_USER'] = 'C:/Python/Lib/site-packages/rpy2'
# importing rpy2
import rpy2.robjects as robjects
# test : evaluating R code
robjects.r('''
# create a function `f`
f <- function(r, verbose=FALSE) {
if (verbose) {
cat("I am calling f().\n")
}
2 * pi * r
}
''')
r_f = robjects.r['f']
res = r_f(3)
print(res[0])
当通过网络请求调用时,此脚本按照预期的方式执行。