| # 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 | |
| ``` |