astral-sh / astral-sh/python-build-standalone

Creating venvs via standard library's `venv.create(..., with_pip=True)` fails for binaries linked against libpython dynamically

Open
#381 15 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Python
Stars
4.4k
Forks
314
Avg merge
1d 9h
Merged PRs (30d)
27

Description

Minimal example:

```python
import subprocess
import venv
from tempfile import mkdtemp
from traceback import print_exc

tmp_dir_path = mkdtemp(prefix="venv-create-bug-example.")
print(f"creating venv in: {tmp_dir_path}")
try:
venv.create(tmp_dir_path, with_pip=True)
except subprocess.CalledProcessError as e:
print_exc()
print(f"subprocess stdout:\n{e.stdout}")
print(f"subprocess stderr:\n{e.stderr}")
exit(1)
```

Running this with a python-build-standalone binary that has a shared library dependency on `libpython*.so`, e.g. [`cpython-3.12.7+20241016-x86_64-unknown-linux-gnu-install_only`](https://github.com/indygreg/python-build-standalone/releases/download/20241016/cpython-3.12.7+20241016-x86_64-unknown-linux-gnu-install_only.tar.gz) will make this fail with (extra newlines inserted for readability):

```
creating venv in: /tmp/venv-create-bug-example.pj058eb3
Traceback (most recent call last):
...
subprocess.CalledProcessError: Command
'['/tmp/venv-create-bug-example.pj058eb3/bin/python', '-m', 'ensurepip', '--upgrade', '--default-pip']'
returned non-zero exit status 127.
subprocess stdout:
b'/tmp/venv-create-bug-example.pj058eb3/bin/python:
error while loading shared libraries:
/tmp/venv-create-bug-example.pj058eb3/bin/../lib/libpython3.12.so.1.0:
cannot open shared object file: No such file or directory\n'
...
```

Obviously, this is because the `python` binary links against `libpython*.so` dynamically with a relative path, and there no longer is a `libpython*.so` at this path when the Python executable (or a symlink to it) finds itself in the venv.

See also the corresponding issue in uv:
- https://github.com/astral-sh/uv/issues/6812

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.