我用rpy2创建了一个小程序,用于在Python中导入R,并将其与cx_Freeze打包在一起。然后,我在开发PC上对其进行了测试。它运作良好。但是,一旦我将.exe复制到具有类似操作系统(Windows 10),相同的python(3.7)和R版本(3.5.2)的另一台PC上,就会跳出以下错误消息:
Traceback(most recent call last):
File "D:\software\Python3.7.3\lib\site-
packages\cx_Freeze\initscripts\__startup__.py",line 14, in run
File "D:\software\Python3.7.3\lib\site-
packages\cx_Freeze\initscripts\Console.py",line 26, in run
File "TR_SNP.py", line 32, in <module>
File "D:\plot.py",line 23, in <module>
dplR = importr('dplR')
File "D:\software\Python3.7.3\lib\site-packages\rpy2\robjects\packages.py",line 453,in importr
rpy2.rinterface.RRuntimeError
R lib导入似乎有问题。
我试图寻找答案。我认为这与我的问题类似:rpy2 works good in PyCharm and doesn't work in .exe file
但是,该答案没有提供我应该将R库放在何处的详细信息。
答案 0 :(得分:0)
冻结的应用程序可能未在目标PC上的正确位置查找R安装。尝试将以下行添加到您的主应用程序:
virtual void write()
这将显示应用程序正在寻找R lib的位置。此路径(可能还有整个r_home)应该存在于目标PC上,并包含兼容的R安装。
如果路径错误,则需要使用类似的命令告诉冻结的应用程序R安装在目标计算机上的位置
import platform
import rpy2.situation
lib_path = rpy2.situation.get_rlib_path(r_home, platform.system())
print(lib_path)
但是这将很困难,因为您通常不会知道R安装的位置。您可以尝试将以下行添加到您的应用程序中(不确定是否可以运行):
import os
os.environ['R_HOME'] = path_to_r_home_on_target_machine