gpt4 book ai didi

python - 为什么我的 .pythonrc 文件在非交互式程序中运行?

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:48 26 4
gpt4 key购买 nike

背景:我大约一年前开始使用 OSX,并且安装了一种奇怪的 Python。也就是说,我使用的是系统 python,并使用 sudo 安装了软件包,当这似乎使事情正常工作时。现在,我从全新的 OSX 安装开始,并尝试以正确的方式进行安装。我已经从brew 安装了python 和python3,并尝试尽可能使用python3。

问题:我有一个 .pythonrc 文件,它只导入了一些常用的包 - 主要是标准库,一些流行的非标准包,以及一些我自己的包。过去,该文件仅在启动交互式 shell 时运行。现在,当使用brew python时,只要我运行任何python程序,它就会运行。

我对 rc 文件的理解肯定存在一些差距 - 我认为其目的是专门用于交互式使用的。不过,当我使用系统 python 时,不会使用 rc 文件 - 所以我的系统 python (2.7.10 at/usr/bin/python) 与 brew python (2.7.12 at/usr/local/bin) 有所不同/python; 3.5.2 位于/usr/local/bin/python3)。如果我从 rc 文件中删除除打印语句之外的所有内容,行为是相同的。

编辑:我意识到 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()

最佳答案

您可以询问回溯模块:

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

$ cat test.py
import ipdb

然后运行

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

您应该获得一个回溯,准确地告诉您启动脚本的运行位置。这很可能是由于调用所致

start_ipython()

ipdb 导入中的某个位置。

关于python - 为什么我的 .pythonrc 文件在非交互式程序中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38781067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com