bazel-contrib / bazel-contrib/rules_python
Runtime error python3xy.dll not found: Missing srcs in python_repository's libpython rule for os:windows
- 主要言語
- Starlark
- スター
- 688
- フォーク
- 721
- 平均マージ
- 15時間 7分
- マージ済み PR(30日)
- 76
説明
# 🐞 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?**
コントリビューションガイド
調査の方向性
Start in python/repositories.bzl around lines 318-326, where the Windows libpython cc_library defines its srcs. Reproduce the reported cc_binary scenario on Windows and inspect how Python.h selects the version-specific runtime DLL. Done means the generated target makes the required python3xy.dll available at runtime without the reported missing-DLL error.
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- build-system
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 42/100