2016-08-05 4 views
0

コンテキスト:私は約1年前にOSXを使い始めましたが、私は一種のねじれたPythonインストールがありました。つまり、私はシステムのpythonを使っていて、sudoを使ってパッケージをインストールしました。さて、私は新鮮なOSXのインストールから始まり、それを正しい方法でしようとしています。私はbrewからpythonとpython3をインストールし、可能な限りpython3を使用しようとしています。私の.pythonrcファイルが非対話型プログラムで実行されているのはなぜですか?

問題:私は.pythonrcファイルを持っています。これは一般的に使われているパッケージのほんの一握りをインポートしています - ほとんどは標準のlib、いくつかの一般的で非標準のパッケージ、以前は、このファイルは対話シェルを起動したときにのみ実行されていました。今、brew pythonを使うときは、私がPythonプログラムを実行するたびに実行されます。

私はrcファイルの理解に若干のギャップがある必要があります - 私はその目的が特にインタラクティブな使用のためだと思っていました。それでもシステムPythonを使用すると、rcファイルは使用されません。システムのpython(2.7.10/usr/bin/python)とbrew python(2.7.12/usr/local/bin/python; 3.5.2(/ usr/local/bin/python3)にあります。 rcファイルからprintステートメント以外のすべてを削除した場合の動作は同じです。

編集:ipdbをインポートしているので、rcファイルが実行されていることがわかりました。これは理にかなっていますが、私はそれがなぜPythonの環境やバージョンで起こるのか、他のものではないのかまだ分かりません。

編集:https://github.com/gotcha/ipdb/blob/master/ipdb/main.py#L44この行は失敗します。これが何かを意味するかどうかは不明です。 .pythonrc内から

のフルスタックトレース:

File "hello.py", line 1, in <module> 
    from ipdb import set_trace 
    File "/usr/local/lib/python2.7/site-packages/ipdb/__init__.py", line 7, in <module> 
    from ipdb.__main__ import set_trace, post_mortem, pm, run    # noqa 
    File "/usr/local/lib/python2.7/site-packages/ipdb/__main__.py", line 51, in <module> 
    ipapp.initialize([]) 
    File "<decorator-gen-109>", line 2, in initialize 
    File "/usr/local/lib/python2.7/site-packages/traitlets/config/application.py", line 74, in catch_config_error 
    return method(app, *args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/IPython/terminal/ipapp.py", line 315, in initialize 
    self.init_code() 
    File "/usr/local/lib/python2.7/site-packages/IPython/core/shellapp.py", line 263, in init_code 
    self._run_startup_files() 
    File "/usr/local/lib/python2.7/site-packages/IPython/core/shellapp.py", line 342, in _run_startup_files 
    self._exec_file(python_startup) 
    File "/usr/local/lib/python2.7/site-packages/IPython/core/shellapp.py", line 328, in _exec_file 
    raise_exceptions=True) 
    File "/usr/local/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 2469, in safe_execfile 
    self.compile if kw['shell_futures'] else None) 
    File "/usr/local/lib/python2.7/site-packages/IPython/utils/py3compat.py", line 288, in execfile 
    builtin_mod.execfile(filename, *where) 
    File "~/.pythonrc", line 57, in <module> 
    import traceback; traceback.print_stack() 

答えて

1

あなたはトレースバックモジュールを依頼することができます。

$ cat .pythonrc 
import traceback; traceback.print_stack() 

$ cat test.py 
import ipdb 

その後

$ PYTHONSTARTUP="$HOME/.pythonrc" python test.py 

を実行することによって、あなたはあなたを伝えるトレースバックを取得する必要があります起動スクリプトが実行されている場所から正確に。おそらく、これは電話によるものです。

start_ipython() 

ipdbインポートのどこかにあります。

+0

'ipapp.initialize([])'があり、 'start_ipython'はありません。 'get_ipython'が失敗した後に起こる' except'の内部で 'initialize'呼び出しが起こっています。これは参考になりますが、私はそれが何を意味するのかはよく分かりません... – monguin

+0

これは、IPythonがまだロードされていないことを意味します。完全なスタックトレースを投稿できますか? – valhallasw

+0

上記スタックトレースが追加されました。 – monguin

関連する問題