问题描述
我在docker中运行apache superset 0.36,并为redis和postgres使用了单独的docker。尝试连接到主机上运行的MySQL数据源时,出现错误“ ERROR:superset.views.core:Unexpected error No module named'pymysql'” 。
我尝试用bash设置容器“ sudo docker run -it superset_superset bash”的超级设置,然后“ pip install pymysql” ,但收到警告“警告:目录'/ home / superset /。当前用户不拥有cache / pip / http'或其父目录,并且缓存已被禁用。请检查该目录的权限和所有者。如果使用sudo执行pip,则可能需要sudo的-H标志。“ ,它不会安装pymysql。
在容器内运行pip install pymysql时引发的错误是“正在安装收集的软件包:pymysql错误:由于环境错误而无法安装软件包:[Errno 13]权限被拒绝:'/usr/local/lib/python3.6/site -packages / pymysql'考虑使用--user选项或检查权限。“尝试pip安装pymysql --user也是同样的错误。
在此方面的任何帮助将不胜感激。
解决方法
某种程度上,错误消息已经显示了答案:
sudo -H pip install pymysql
sudo -H
的美好之处
当您运行sudo时,您的环境将被传递,而有效用户将切换为root。您的环境包括〜/或home目录(环境变量HOME的值)为/ home / bijay。
pip在下载软件包之前会查找http缓存。可能出于安全性,完整性和隐私性方面的原因,pip禁用了缓存,以便不写入当前用户不拥有的缓存目录。只是告诉你它做到了。
,正如它暗示的那样,使用sudo -H将在执行传递给sudo的命令之前设置HOME环境变量,使用root的主目录/ root作为$ HOME而不是用户的主目录。然后可以将缓存写入/root/.cache/pip/http且没有错误。
附带一提,您可能永远都不应该以root用户身份运行pip。
如果您使用的是docker-compose
,请查看这篇文章:https://preset.io/blog/2020-05-18-install-db-drivers/
基本上,可以通过在运行docker/requirements-local.txt
之前将它们添加到docker-compose up
中来添加额外的软件包。
注意:requirements-local.txt
已安装到本地生成的映像中:https://github.com/apache/incubator-superset/blob/master/Dockerfile-dev#L23