我可以告诉 lldb 使用除 PATH 上第一个之外的 Python 吗?

Rob*_*unn 5 python macos xcode lldb xcode4.6

我正在努力在 lldb 会话中添加一些 Python 脚本,但我发现它仅/usr/bin/python在 PATH 上的第一个 Python 时才有效。如果我首先在 PATH 上找到另一个 Python,那么一旦 lldb 初始化其内部 Python 系统,它就会收到如下所示的异常并终止。

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site.py", line 548, in <module>
    main()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site.py", line 530, in main
    known_paths = addusersitepackages(known_paths)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site.py", line 266, in addusersitepackages
    user_site = getusersitepackages()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site.py", line 241, in getusersitepackages
    user_base = getuserbase() # this will also set USER_BASE
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site.py", line 231, in getuserbase
    USER_BASE = get_config_var('userbase')
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sysconfig.py", line 516, in get_config_var
    return get_config_vars().get(name)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sysconfig.py", line 449, in get_config_vars
    import re
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 105, in <module>
    import sre_compile
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sre_compile.py", line 14, in <module>
    import sre_parse
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sre_parse.py", line 17, in <module>
    from sre_constants import *
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sre_constants.py", line 18, in <module>
    from _sre import MAXREPEAT
ImportError: cannot import name MAXREPEAT
Run Code Online (Sandbox Code Playgroud)

是否有一些 lldb 设置或命令可以让我保留我的 PATH 但仍然可以使用 lldb /usr/bin/python

我还可以通过设置来解决这个问题PYTHONHOME=/usr,但由于我正在调试自定义 Python 构建和 Python 扩展,我真的希望不需要改变环境。看来应该有一些类似的方法settings set internal-python /usr/bin/python,我可以把它~/.lldbinit告诉 lldb 使用什么。

Enr*_*ata 1

LLDB 实际上并不关心 Python 二进制文件本身\n但它更关心的是 Python.framework,因为调试器是链接到它的

\n\n

不支持更改 OSX 附带的 Python 版本,因为我们使用 C API(直接或通过 SWIG),并假设某些类/函数/类型可用(您可以查看源代码以了解确切的内容)假设会起作用)。由于我们也使用 SWIG,因此并非 Python 所需的所有内容都在我们的直接控制之下(SWIG 也在那里有发言权),因此任何 Python 不是 OSX(我们测试过的)附带的内容的场景都可能有效,或者可能不会

\n\n

话虽如此,您也许可以 \xe2\x80\x9ctamper\xe2\x80\x9d Python.framework 将其指向 Python 的其他版本。从那时起,你\xe2\x80\x99就只能靠自己了。

\n