2013-10-25 83 views
4

我正在爲我的lldb會話添加一些Python腳本,但我發現它只在/usr/bin/python是PATH上的第一個Python時才起作用。如果我有另一個在PATH上第一個找到的Python,那麼只要lldb初始化它的內部Python系統,它就會得到如下的異常並終止。我可以告訴lldb使用PATH中第一個以外的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 

有一些LLDB設置或命令,讓我獨自離開我的道路,但仍然有LLDB使用/usr/bin/python

我也可以通過設置PYTHONHOME=/usr來解決這個問題,但是由於我在調試自定義Python構建和Python擴展,所以我真的不想改變環境。似乎應該有一些方法,如settings set internal-python /usr/bin/python,我可以在我的~/.lldbinit中告訴lldb使用什麼。

+0

你可能需要設置你的路徑來包含你想要使用的python版本的站點包和各種包含...但是我確定它可以完成(我使用pycharm和一些項目使用kivy和它的版本的Python,而其他人使用我的常規python安裝,但即時通訊運行win7,所以它可能會或可能不適用於你)(ps wxPython是偉大的,我用它所有的時間!) –

+1

是的,我也可以解決它設置PYTHONHOME,但由於我正在調試自定義Python構建和Python擴展,我真的不想改變環境。我會更新這個問題... – RobinDunn

回答

0

LLDB實際上並不那麼在乎Python的二進制文件本身 它所做的不過很在意是Python.framework,因爲這是調試器對

鏈接從改變的Python版本隨OSX提供的一個不受支持,因爲我們使用C API(直接並通過SWIG),並假設某些類/函數/類型將可用(您可以查看源代碼以準確瞭解假定的工作方式)。因爲我們也使用SWIG,所以並不需要Python所需的所有東西都在我們的直接控制之下(SWIG在那裏也有發言權),因此任何Python除OSX(以及我們測試過的)附帶的東西都可能工作,或者可能不會

即便如此,您也許能夠「篡改」Python.framework,將其指向Python的某個其他版本。從那裏開始,你就靠自己了。

+0

其實我正在尋找的是一些告訴lldb強制自己使用系統Python框架的方法,就像它已經做的那樣。如果我在PATH中有其他Python,那麼它似乎試圖使用Python框架而不是系統框架。如果我更改了PATH或設置了PYTHONHOME,那麼它再次做了正確的事情,但是如果我從lldb中啓動調試的應用程序,那麼我的調試過程看到的環境也會有這些更改。 – RobinDunn

+0

或者,您可以使用lldb process launch命令設置/取消您認爲適合自己的環境的環境,而不考慮lldb的環境。 幫助進程在LLDB提示符處啓動具有詳細信息 –

+0

哇,Xcode用lldb替換gdb,不會靜態指向唯一可以工作的框架,然後告訴所有用戶克服它並修復它們的python。 –

相關問題