如何使用PyCharm保留远程Python解释器的环境变量

时间:2017-10-11 11:01:08

标签: python ssh environment-variables pycharm

我正在使用远程Python解释器(使用pew创建的虚拟环境),我通过ssh访问。当手动ssh到服务器并使用解释器时,这工作正常。但是当使用PyCharm来调用它时,它会忘记我在.bashrc中导出的环境变量。

似乎在通过ssh调用Python解释器时,PyCharm(尽管从bash开始)忽略了.bashrc。 Here表明shell包装器是解决方案。

#!/bin/bash -l
/path/to/interpreter/bin/python

但是简单地给PyCharm这个shell文件作为解释器不起作用(禁用包管理,当运行py-code时,Python终端打开......)。

如何获得一个“shell wrapper”,确保在运行PyCharm远程Python解释器之前执行.bashrc?

我确保PyCharm在正确的环境中运行。所有本地解释器都没有显示该问题(在PyCharm终端和Python脚本中进行测试:)

import os
print(os.environ)

我也知道运行特定文件的“编辑配置”选项以及在那里设置环境变量的可能性,但是对于每个项目/文件而言,这都是乏味的,而不是我正在寻找的。

3 个答案:

答案 0 :(得分:1)

我也一直在使用问题中提供的link中的解决方案,但有两个修改:

1。 .profile代替.bashrc

我的.bashrc包含的命令使在交互式Shell中的工作更加轻松(设置别名,激活虚拟环境)。在.profile中,我具有交互式和非交互式Shell都需要的命令,例如,设置重要库的路径。

我为远程Python解释器提供了.profile而不是.bashrc的源代码,以避免不必要的混乱环境,并确保与在非交互式(登录)shell中调用python的设置相同

此外,您指定为远程解释器的外壳程序包装必须保持沉默。如果您获取.bashrc的源代码,并且其中包含打印诸如"Activated my_conda_env"之类的消息的命令,则会与PyCharm的远程调试器混为一谈。

2。用外壳程序替换python3.x

PyCharm的远程解释器和远程调试器不需要Shell包装器具有特定名称。但是,我观察到其他功能(例如PyCharm的打包工具(pip等))期望解释器具有标准名称(pythonpython3python3.6)。因此,我需要用外壳包装程序本身来代替python3.6命令。

这样做的好处是,登录到远程服务器并在其中调用python还将执行包装程序。因此,该行为与通过本地计算机上的PyCharm调用行为相同。

解决方案

最终解决方案如下:

  1. 在虚拟环境/ conda环境的bin目录中:

    $ mv python3.6 python3.6_original
    $ touch python3.6
    $ chmod +x python3.6
    
  2. python3.6中:

     #!/bin/bash
    
     # Make sure that the profile was sourced, so that executing python
     # via ssh does the same as executing python locally.
     if ! (( $PROFILE_SOURCED )); then
             . ~/.profile
     fi
    
     # Get the directory of this script, see 
     # https://stackoverflow.com/a/53122736/2305095
     __dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
    
     # Execute the original python.
     ${__dir}/python3.6_original "$@"
    
  3. .profile的末尾:

    export PROFILE_SOURCED=1
    

pythonpython3是默认情况下指向python3.6的符号链接,因此它们自动指向外壳程序包装。

如果您使用的是conda,还应该检查python3.6是否已经.bashrc来源。 conda更新.bashrc中的PATH(并建议您将其保留在此)。对于远程Python解释器,您可能还希望以相同的方式在python3.6中更新PATH,并包括指向相关bin目录的路径(例如,全局condabin和相应环境的路径)。 bin目录。

我已经使用此解决方案已有6个月了,到目前为止对此感到满意。让我知道您是否遇到任何问题!

答案 1 :(得分:0)

您希望您的包装器包含" $ @"在你的包装器中调用python时:

#!/bin/bash -l
/path/to/interpreter/bin/python "$@"

通过这个技巧,我设法在Windows上设置pycharm,同时在WSL(Ubuntu bash)中使用virtualenv并检索我的WSL env变量。

答案 2 :(得分:0)

尝试一下,可能会起作用。 右上角->编辑配置->环境变量->添加变量