2016-08-05 1 views
0

Контекст: я начал использовать OSX около года назад, и у меня была какая-то винтовая установка на python. То есть я использовал системный python и установил пакеты с sudo, когда это, казалось, заставило все работать. Теперь я начинаю с новой установки OSX и пытаюсь сделать это правильно. Я установил python и python3 из заваривания и стараюсь использовать python3, когда это возможно.Почему мой файл .pythonrc запускается в неинтерактивных программах?

Проблема: У меня есть файл .pythonrc, который просто импортирует несколько широко используемых пакетов - в основном стандартную библиотеку, несколько популярных нестандартных пакетов и несколько моих собственных. Раньше этот файл запускался только при запуске интерактивной оболочки. Теперь, при использовании пивоваренного питона, он запускается всякий раз, когда я запускаю любую программу python.

Должно быть некоторый пробел в моем понимании файла rc - я думал, что цель была специально для интерактивного использования. Тем не менее, когда я использую системный python, rc-файл не используется, поэтому в моем системном python (2.7.10 at/usr/bin/python) нет никакого отличия от python (2.7.12 at/usr/local/bin/python; 3.5.2 в/usr/local/bin/python3). Поведение такое же, если я удалю все, кроме инструкции print из файла rc.

Редактировать: Я понял, что rc-файл запущен, потому что я импортирую ipdb. Это имеет смысл, я полагаю, но я до сих пор не понимаю, почему это произойдет в некоторых средах/версиях python, но не в других.

Редактировать: https://github.com/gotcha/ipdb/blob/master/ipdb/main.py#L44 Эта строка не работает, не уверен, что это что-то значит.

Полный StackTrace внутри .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 ([])', no 'start_ipython'. вызов 'initialize' происходит внутри' except', который происходит после сбоя 'get_ipython'. Это кажется информативным, но я не совсем уверен, что это значит ... – monguin

+0

Это просто означает, что IPython еще не загружен. Можете ли вы опубликовать полную трассировку стека? – valhallasw

+0

След стека добавлен выше. – monguin

 Смежные вопросы

  • Нет связанных вопросов^_^