Python may startup fails if the `home` variable in `pyvenv.cfg` is inaccurate
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Bug report
Bug description:
The problem comes from getpath.py. When getpath.py cannot find STDLIB_LANDMARKS from executable_dir, it will set prefix to the PREFIX. If the directory set in PREFIX does not exist, an error occurs.
See details: https://github.com/python/cpython/blob/49f15d8667e4755876698a8daa13bab6acee5fa1/Modules/getpath.py#L590-L599
How to reproduce
# 1. build cpython with prefix
./configure --prefix=/home/xx/tmp/install_dir
make
make install
# 2. copy install_dir to another
cd /home/xx/tmp
cp -r ./install_dir/ ./copy_dir
# 3. create a symlink from copy_dir/python
ln -s ./copy_dir/bin/python3 ./pylink
# 4. delete original install_dir
rm -rf ./install_dir/
# 5. use python symlink to create a venv
./pylink -m venv ./bad_venv
# 6. failed to start!
./bad_venv/bin/python3
Error message
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Python path configuration:
PYTHONHOME = (not set)
PYTHONPATH = (not set)
program name = './bad_venv/bin/python3'
isolated = 0
environment = 1
user site = 1
safe_path = 0
import site = 1
is in build tree = 0
stdlib dir = '/home/xx/tmp/install_dir/lib/python3.12'
sys._base_executable = '/home/xx/tmp/copy_dir/bin/python3.12'
sys.base_prefix = '/home/xx/tmp/install_dir'
sys.base_exec_prefix = '/home/xx/tmp/install_dir'
sys.platlibdir = 'lib'
sys.executable = '/home/xx/tmp/bad_venv/bin/python3'
sys.prefix = '/home/xx/tmp/install_dir'
sys.exec_prefix = '/home/xx/tmp/install_dir'
sys.path = [
'/home/xx/tmp/install_dir/lib/python312.zip',
'/home/xx/tmp/install_dir/lib/python3.12',
'/home/xx/tmp/install_dir/lib/python3.12/lib-dynload',
]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'
We can find that sys._base_executable here is correct, but sys.base_prefix is wrong.
We could configure base_prefix through the real interpreter path, which is used to search for libraries that Python depends on.
CPython versions tested on:
3.12
Operating systems tested on:
Linux
Linked PRs
- gh-127441
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con Modules/getpath.py alrededor de las líneas 590-599 y luego ejecuta en Linux la reproducción reportada de build, copia, symlink y venv. Compara los valores resultantes de sys._base_executable y sys.base_prefix, y revisa el PR relacionado gh-127441. Se considera terminado cuando el intérprete de venv reubicado se inicia y puede cargar encodings sin hacer referencia a la ruta de instalación eliminada.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- operating-systems
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100