bazel-contrib / bazel-contrib/rules_python

Runtime error python3xy.dll not found: Missing srcs in python_repository's libpython rule for os:windows

Abierto
#1,823 4 comentarios 0 reacciones 0 asignados Ver en GitHub
type: toolchain
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

Abrir la 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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.