IPython uses a different PATH environment than shell

I am having trouble calling pip inside the IPython REPL, and after a while I noticed that IPython does not use the same $ PATH environment as my shell.

$ echo $PATH
/Users/jimmy/dev/anaconda/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/texbin

$ ipython
In [1]: !echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/texbin:/Users/jimmy/dev/anaconda/bin

He seems to be knocking down the path, and I'm not quite sure what happened.

I am using ZSH installed through oh-my-zsh as a shell if this helps.

This is what returns sys.path():

['',
 '/Users/jimmy/dev/anaconda/bin',
 '/Users/jimmy/dev/anaconda/lib/python2.7/site-packages/sparsesvd-0.2.2-py2.7-macosx-10.5-x86_64.egg',
 '/Users/jimmy/dev/projects/pyresult',
 '/Users/jimmy/dev/work/gavagai/userdata',
 '/Users/jimmy/dev/work/gavagai/gavapi',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python27.zip',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7/plat-darwin',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7/plat-mac',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7/lib-tk',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7/lib-old',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7/lib-dynload',
 '/Users/jimmy/dev/anaconda/lib/python2.7/site-packages/runipy-0.1.0-py2.7.egg',
 '/Users/jimmy/dev/anaconda/lib/python2.7/site-packages/setuptools-3.6-py2.7.egg',
 '/Users/jimmy/dev/anaconda/lib/python2.7/site-packages',
 '/Users/jimmy/dev/anaconda/lib/python2.7/site-packages/PIL',
 '/Users/jimmy/dev/anaconda/lib/python2.7/site-packages/IPython/extensions',
 '/Users/jimmy/.ipython']

And here is what returns os.environ['PATH']:

'/Users/jimmy/dev/anaconda/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/texbin'

Both seem to put it in the correct order.

Thanks for the help.

+4
source share
2 answers

, sys.path ; , Python , , . PATH , , sys.path.

os.environ['PATH'], , $PATH , IPython. !echo $PATH $PATH , IPython, escape- (!).

, IPython , , , , zsh. , IPython !echo $SHELL. , , .

, IPython , , . , , .

. @mklement0 , gory, .

+6

@holdenweb, OS X:

  • , IPython !, - IPython .
    • path/to/default/shell -c ...
    • , !ps -p $$ && :
  • echo $SHELL - .

  • :

    • zsh:: /etc/zshenv ~/.zshenv
    • bash: a script, $BASH_ENV, .
  • , / ,

    • -

    , , .

, , , IPython:

  • ~/.zprofile - , , zsh ( X , , Terminal.app, login shells).
  • ~/.zshrc

, , OS X $PATH NON-shell-:

/usr/bin:/bin:/usr/sbin:/sbin  # Note the absence of /usr/local/bin.

/usr/local/bin ( , ) , ( /usr/libexec/path_helper):

  • zsh:
    • /etc/zshenv
    • : ALL zsh.
  • bash ( sh), ksh:
    • /etc/profile
    • : LOGIN.

Upshot:

  • $PATH (, /usr/local/bin , ).
  • bash/sh ksh , , $PATH. , , GUI, Alfred, .
  • zsh , /etc/zshenv zsh.
+6

Source: https://habr.com/ru/post/1547875/


All Articles