Pycharm set the correct environment variable PATH

后端 未结 3 725
南笙
南笙 2020-12-19 01:25

I\'m executing with pycharm the following:

print(os.environ[\"PATH\"]) # returns \'/usr/bin:/bin:/usr/sbin:/sbin\'

But when I execute echo

3条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-19 02:00

    @fj123x, I'm going to guess from your post that you are

    1. on a mac
    2. using a shell other than bash (perhaps zsh)

    If true, the problem is that the JetBrains jediterm terminal emulator is not executing all shell startup files in the correct order.

    If you are using zsh, you can fix that root problem by editing the terminal plugin's .zshrc. Assuming PyCharn is in your Applications folder, open /Applications/PyCharm.app/Contents/plugins/terminal/.zshrc and replace the contents with:

    #!/bin/zsh
    
    # starver mod
    # Jetbrains uses jediterm as a java terminal emulator for all terminal uses.
    # There are some apparent limits on use:
    # - must use old-style shebang - not the #!/usr/bin/env zsh
    # - must implement the startup file loading here
    #
    # Note: original contents are in lib/terminal.jar
    
    # mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
    bindkey '^[^[[C' forward-word
    bindkey '^[^[[D' backward-word
    
    ZDOTDIR=$_OLD_ZDOTDIR
    
    if [ -n "$JEDITERM_USER_RCFILE" ]
    then
      source "$JEDITERM_USER_RCFILE"
      unset JEDITERM_USER_RCFILE
    fi
    
    if [ -n "$ZDOTDIR" ]
    then
      DOTDIR=$ZDOTDIR
    else
      DOTDIR=$HOME
    fi
    
    if [ -f "/etc/zshenv" ]; then
         source "/etc/zshenv"
    fi
    
    if [ -f "$DOTDIR/.zshenv" ]; then
         source "$DOTDIR/.zshenv"
    fi
    
    if [ -n $LOGIN_SHELL ]; then
      if [ -f "/etc/zprofile" ]; then
           source "/etc/zprofile"
      fi
      if [ -f "$DOTDIR/.zprofile" ]; then
           source "$DOTDIR/.zprofile"
      fi
    fi
    
    if [ -f "/etc/zshrc" ]; then
         source "/etc/zshrc"
    fi
    
    if [ -f "$DOTDIR/.zshrc" ]; then
         source "$DOTDIR/.zshrc"
    fi
    
    if [ -n $LOGIN_SHELL ]; then
      if [ -f "/etc/zlogin" ]; then
           source "/etc/zlogin"
      fi
      if [ -f "$DOTDIR/.zlogin" ]; then
           source "$DOTDIR/.zlogin"
      fi
    fi
    
    if [ -n "$JEDITERM_SOURCE" ]
    then
      source $(echo $JEDITERM_SOURCE)
      unset JEDITERM_SOURCE
    fi
    

    If you are interested in all the gory details, or you want to see how I solved this problem so you can develop a solution for another shell, see this answer: https://stackoverflow.com/a/51006003/1089228

提交回复
热议问题