在R/Shiny中调用Python脚本无法导入pandas的问题求助
解决Shiny调用Python脚本无法导入pandas的问题
这绝对是Shiny调用的Python环境和你终端使用的不是同一个导致的——毕竟Anaconda会帮你管理多个虚拟环境,环境路径不一致是这类问题的头号元凶。下面给你几个靠谱的解决方案:
1. 直接使用终端Python的完整路径调用
首先在终端里确认你能正常运行脚本的Python路径:
which python # 或者如果用的是python3的话 which python3
你会得到类似/Users/你的用户名/opt/anaconda3/bin/python这样的路径。接下来把Shiny里的system()命令替换成这个完整路径:
system("/Users/你的用户名/opt/anaconda3/bin/python /Users/Downloads/Untitled3.py EMEA regulatory '10% productivity saves SOW'")
这样就强制Shiny使用你终端里那个已经装了pandas的Python环境了。
2. 给Python脚本添加Shebang行
在你的Untitled3.py最开头加上一行指定Python解释器的路径(就是刚才终端拿到的路径):
#!/Users/你的用户名/opt/anaconda3/bin/python import pandas as pd import numpy as np import sys from difflib import SequenceMatcher # 后续代码...
然后给脚本添加执行权限(在终端里运行):
chmod +x /Users/Downloads/Untitled3.py
之后Shiny里就可以直接调用脚本文件了:
system("/Users/Downloads/Untitled3.py EMEA regulatory '10% productivity saves SOW'")
3. 用reticulate包管理Shiny中的Python环境
如果你经常在Shiny里调用Python,推荐用reticulate包来统一管理环境,比直接用system()更灵活可靠:
library(reticulate) # 指定你要用的conda环境,比如默认的base环境 use_condaenv("base") # 或者直接指定Python路径 # use_python("/Users/你的用户名/opt/anaconda3/bin/python") # 执行Python脚本并传递参数 py_run_file("/Users/Downloads/Untitled3.py", args = c("EMEA", "regulatory", "10% productivity saves SOW"))
为什么会出现这个问题?
Shiny运行时的系统环境变量PATH和你终端里的不一样——终端里因为Anaconda的初始化配置,会把conda的Python路径放在PATH最前面,所以输入python时会优先用conda环境里的解释器;但Shiny启动时不会加载终端的配置(比如.bashrc/.zshrc),所以python指向的是系统默认的Python解释器,而这个解释器大概率没装pandas,自然就报错了。
内容的提问来源于stack exchange,提问作者user2906657
相关产品推荐
相关产品推荐

