【问题标题】:How to keep environment variables for remote Python interpreter with PyCharm如何使用 PyCharm 为远程 Python 解释器保留环境变量
【发布时间】:2017-10-11 11:01:08
【问题描述】:

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

似乎在通过 ssh 调用 Python 解释器时,PyCharm(即使从 bash 启动)忽略了 .bashrc。 Here 表明外壳包装器是解决方案。

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

但是仅仅将这个 shell 文件作为解释器提供给 PyCharm 是行不通的(包管理被禁用,并且在运行 py-code 时会打开一个 Python 终端...)。

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


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

import os
print(os.environ)

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

【问题讨论】:

    标签: python ssh environment-variables pycharm


    【解决方案1】:

    在包装器中调用 python 时,您希望包装器包含“$@”:

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

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

    【讨论】:

      【解决方案2】:

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

      1。 .profile 而不是 .bashrc

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

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

      此外,您指定为远程解释器的 shell 包装器必须是静默的。如果你获取.bashrc 并且它包含一个打印类似"Activated my_conda_env" 的消息的命令,这将与 PyCharm 的远程调试器混淆。

      2。用 shell 包装器替换 python3.x

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

      这样做的好处是登录到远程服务器并在那里调用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 中的路径(并建议您将其保留在那里)。对于远程 Python 解释器,您可能还希望以相同的方式在 python3.6 中更新 PATH 并包含相关 bin 目录的路径(例如全局 condabin 和相应环境的 bin 目录)。

      我已经使用这个解决方案 6 个月了,到目前为止我对它很满意。如果您遇到任何问题,请告诉我!

      【讨论】:

        【解决方案3】:

        试试这个,它可能会奏效。 右上角->编辑配置->环境变量->添加你的变量

        【讨论】:

          猜你喜欢
          • 2021-03-05
          • 1970-01-01
          • 1970-01-01
          • 2019-12-01
          • 2016-04-07
          • 1970-01-01
          • 2012-01-27
          相关资源
          最近更新 更多