bazel-contrib / bazel-contrib/rules_python

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

Ouverte
#1,823 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
type: toolchain
Langage dominant
Starlark
Étoiles
688
Forks
721
Merge moyen
15 h 7 min
PR mergées (30 j)
76

Description

# 🐞 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?**

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez dans python/repositories.bzl autour des lignes 318-326, où la cc_library libpython de Windows définit ses srcs. Reproduisez le scénario cc_binary signalé sous Windows et examinez comment Python.h sélectionne la DLL d’exécution spécifique à la version. C’est terminé lorsque la target générée rend la python3xy.dll requise disponible à l’exécution sans l’erreur signalée de DLL manquante.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
build-system
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.