I use python remote interpreter by setting ssh method on pycharm, but I found if I run os.environ on my local machine it will get an incomplete environment variables. I tried to run the code by "python xxx.py" directly on the remote machine which I used as python interpreter, I could get the right environment variables.
My question is how to run os.environ by using remote interpreter with pycharm and get the complete environment variables?
example: I have a machine A as my local development machine and a machine B I set a python environment as remote interpreter. I run pycharm on A and use ssh to connect to B's remote python interpreter.
- if I run print(os.environ) on A by pycharm I will get the result like:
ssh://root@machine_B/root/anaconda3/bin/python3.7 -u /tmp/pycharm_project_123/test_env.py
environ({'SSH_CONNECTION': 'machine_A_IP 60900 machine_B_IP 8022', 'USER': 'root', 'PWD': '/tmp/pycharm_project_123', 'HOME': '/root', 'SSH_CLIENT': 'machine_A_IP 60900 8022', 'SSH_TTY': '/dev/pts/1', 'MAIL': '/var/mail/root', 'TERM': 'vt100', 'SHELL': '/bin/bash', 'SHLVL': '1', 'LOGNAME': 'root', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games', 'OLDPWD': '/root', '_': '/usr/bin/env', 'PYCHARM_HOSTED': '1', 'PYTHONUNBUFFERED': '1', 'PYTHONIOENCODING': 'UTF-8', 'PYCHARM_MATPLOTLIB_PORT': '56977', 'JETBRAINS_REMOTE_RUN': '1', 'PYTHONPATH': '/root/.pycharm_helpers/pycharm_matplotlib_backend:/tmp/pycharm_project_123', 'LC_CTYPE': 'C.UTF-8'})
- If I ssh to login machine B first and run print(os.environ) on B by command line like "python test_env.py", the result like:
python test_env.py
environ({'CONDA_SHLVL': '1', 'LS_COLORS': …, 'CONDA_EXE': '/root/anaconda3/bin/conda', 'SSH_CONNECTION': 'machine_A_IP 61578 machine_B_IP 8022', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'CONDA_PREFIX': '/root/anaconda3', 'MLFLOW_CONDA_HOME': '/root/anaconda3', '_CE_M': '', 'USER': 'root', 'PWD': '/tmp/pycharm_project_123’, 'HOME': '/root', 'CONDA_PYTHON_EXE': '/root/anaconda3/bin/python', 'LC_CTYPE': 'C.UTF-8', 'LC_TERMINAL': 'iTerm2', 'SSH_CLIENT': 'machine_A_IP 61578 8022', 'LC_TERMINAL_VERSION': '3.3.7', '_CE_CONDA': '', 'CONDA_PROMPT_MODIFIER': '(base) ', 'SSH_TTY': '/dev/pts/1', 'MAIL': '/var/mail/root', 'TERM': 'xterm-256color', 'SHELL': '/bin/bash', 'SHLVL': '1', 'LOGNAME': 'root', 'PATH': '/root/anaconda3/bin:/root/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games', 'CONDA_DEFAULT_ENV': 'base', 'LESSOPEN': '| /usr/bin/lesspipe %s', '_': '/root/anaconda3/bin/python', 'OLDPWD': '/root'})
The difference is the first run lost some environment variables like CONDA_EXE, MLFLOW_CONDA_HOME, etc. I had added these environment variables into ~/.bashrc and /etc/profile on machine B already and also used source to active the environment profile but it still didn't work.