背景介绍
利用pycharm ssh interpreter 运行部署在容器中的python文件,发现无法调用torch的gpu版本。
但是使用docker exec
的方式进入容器不存在该问题。
通过在python的调试模式下执行os.environ
,以及在容器中执行ENV
,对比发现pycharm通过ssh远程登录执行程序的环境变量与docker exec
进入容器的环境变量不同。
解决方案
首先参考了:https://blog.csdn.net/thlzjfefe/article/details/104777283
在/etc/profile
中添加了export $(cat /proc/1/environ |tr '\0' '\n' | xargs)
发现通过终端直接ssh登录容器,在shell中执行程序时可以获得正确的环境变量。但是:
使用pycharm ssh interpreter运行程序仍然无法获得/etc/profile
中的环境变量。
经过网上调研,感谢博客https://blog.csdn.net/vivianXuejun/article/details/80557287
对bash的四种模式:interactive + login shell、non-interactive + login shell、interactive + non-login shell、non-interactive + non-login shell进行了详细的解释。
使用pycharm ssh interpreter直接远程运行程序属于non-interactive + non-login shell
模式。程序执行前会根据BASH_ENV
指定的配置文件进行加载。
通过echo BASH_ENV$
,得到配置文件路径为:
/etc/bash.bashrc
将export $(cat /proc/1/environ |tr '\0' '\n' | xargs)
加入/etc/bash.bashrc
中,问题成功解决。