bazel-contrib / bazel-contrib/rules_python
Runtime error python3xy.dll not found: Missing srcs in python_repository's libpython rule for os:windows
- Lenguaje dominante
- Starlark
- Estrellas
- 688
- Forks
- 721
- Merge medio
- 15 h 7 min
- PR fusionados (30 d)
- 76
Descripción
# 🐞 bug report
The srcs attribute for this cc_library for os:windows is` ["python3.dll", "libs/python{python_version_nodot}.lib"]`. It is missing the version-specific binary, eg python311.dll.
https://github.com/bazelbuild/rules_python/blob/c5c03b2477dd1ce0c06c9dc60bf816995f222bcf/python/repositories.bzl#L318-L326
This will result in a runtime error (python311.dll not found) in the following scenario.
1. User creates a cc_binary which has `#include ` and which depends on the libpython above.
2. User never defines `#Py_LIMITED_ABI `
3. User attempts to run the cc_binary
The Python.h includes the pyconfig.h, which causes msvc to attempt linking against python3xy.dll via the` #pragma comment(lib, ...) `mechanism. The relevant code from the cpython project is here.
https://github.com/python/cpython/blob/d610d821fd210dce63a1132c274ffdf8acc510bc/PC/pyconfig.h.in#L315-L331
I have resolved this locally by globbing *.dll into the libpython cc_library.
A similar issue occurs if the user defines `#Py_DEBUG`, which causes msvc to attempt linking against the debug binary python3xy_d.dll. I did not see a way to request debug binaries using the python_repository rule but if that were enabled, I think globbing *.dll would fix that case too.
### Affected Rule
python_repository
### Is this a regression?
Unsure.
### Description
See above.
## 🔬 Minimal Reproduction
See above.
## 🔥 Exception or Error
Runtime error python3xy.dll not found
## 🌍 Your Environment
**Operating System:**
Windows 10
**Output of `bazel version`:**
7.0.2
**Rules_python version:**
0.31.0
**Anything else relevant?**
Guía de contribución
Línea de trabajo
Comienza en python/repositories.bzl alrededor de las líneas 318-326, donde la cc_library de libpython para Windows define sus srcs. Reproduce el escenario de cc_binary indicado en Windows e inspecciona cómo Python.h selecciona la DLL de runtime específica de la versión. Se considera terminado cuando el target generado hace que la python3xy.dll requerida esté disponible en tiempo de ejecución sin el error indicado de DLL ausente.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- build-system
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 42/100