| # Caveats |
| |
| (python_caveat)= |
| |
| ## Python |
| |
| LLDB has a powerful scripting interface which is accessible through Python. |
| Python is available either from within LLDB through a (interactive) script |
| interpreter, or as a Python module which you can import from the Python |
| interpreter. |
| |
| To make this possible, LLDB links against the Python shared library. Linking |
| against Python comes with some constraints to be aware of. |
| |
| 1. It is not possible to build and link LLDB against a Python 3 library and |
| use it from Python 2 and vice versa. |
| 2. It is not possible to build and link LLDB against one distribution on |
| Python and use it through an interpreter coming from another distribution. |
| For example, on macOS, if you build and link against Python from |
| python.org, you cannot import the lldb module from the Python interpreter |
| installed with Homebrew. |
| 3. To use third party Python packages from inside LLDB, you need to install |
| them using a utility (such as `pip`) from the same Python distribution as |
| the one used to build and link LLDB. |
| |
| The previous considerations are especially important during development, but |
| apply to binary distributions of LLDB as well. |
| |
| ### LLDB in Xcode on macOS |
| |
| Users of lldb in Xcode on macOS commonly run into these issues when they |
| install Python, often unknowingly as a dependency pulled in by Homebrew or |
| other package managers. The problem is the symlinks that get created in |
| `/usr/local/bin`, which comes before `/usr/bin` in your path. You can use |
| `which python3` to check to what it resolves. |
| |
| To be sure you use the Python that matches with the lldb in Xcode use `xcrun` |
| or use the absolute path to the shims in `/usr/bin`. |
| |
| ``` |
| $ xcrun python3 |
| $ /usr/bin/python3 |
| ``` |
| |
| Similarly, to install packages and be able to use them from within lldb, you'll |
| need to install them with the matching `pip3`. |
| |
| ``` |
| $ xcrun pip3 |
| $ /usr/bin/pip3 |
| ``` |