背景信息:大约一年前我开始使用OSX,我有一种棘手的python安装。也就是说,我正在使用系统python,并且在使用sudo的时候安装了包。现在,我从一个全新的OSX安装开始,并尝试以正确的方式进行。我已经从brew安装了python和python3,并尽可能尝试使用python3。
问题:我有一个.pythonrc文件,它只导入了一些常用的软件包 - 主要是标准的lib,一些流行的非标准软件包,还有一些我自己的软件包。过去,只有在我启动交互式shell时才会运行此文件。现在,当使用brew python时,每当我运行任何python程序时它都会运行。
我对rc文件的理解肯定存在一些差距 - 我认为目的是专门用于交互式使用。不过,当我使用system python时,rc文件并没有被使用 - 所以我的系统python(2.7.10 at / usr / bin / python)与brew python(2.7.12 at / usr / local)有所不同/ bin / python; 3.5.2 at / usr / local / bin / python3)。如果我从rc文件中删除除print参数之外的所有内容,行为是相同的。
编辑:我意识到rc文件正在运行,因为我正在导入ipdb。我认为这是有道理的,但我仍然不明白为什么在某些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()
答案 0 :(得分:1)
您可以询问追溯模块:
$ cat .pythonrc
import traceback; traceback.print_stack()
$ cat test.py
import ipdb
然后运行
$ PYTHONSTARTUP="$HOME/.pythonrc" python test.py
您应该获得一个回溯,告诉您确切地从哪里运行启动脚本。最有可能的是,这是由于电话
start_ipython()
在ipdb导入的某个地方。