bazel-contrib / bazel-contrib/rules_python

PYTHONHOME gets incorrectly set by pip extension on windows

Đang mở
#3,294 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
type: bug type: pip
Ngôn ngữ chính
Starlark
Star
688
Fork
721
Merge trung bình
15 giờ 7 phút
Pull request đã merge (30 ngày)
76

Mô tả

# 🐞 bug report

### Affected Rule

This affects the pip module extension

### Is this a regression?

Not that I'm aware of, but I assume it's worked on windows at some point

### Description

When using the pip extension on windows, I get crashes like:
```
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'

Current thread 0x00000c40 (most recent call first):

```

I traced this back to the `PYTHONHOME` environment variable, which is being set from the stdout of a repository_ctx.execute call. Instead of just containing the result of the command, it also appears to contain the prompt and the command itself, corrupting this load-bearing environment variable. An example of what I see:
```
Python path configuration:
PYTHONHOME = '\x0d\x0aC:\tmp\3hjz7nbt\external\rules_python~~pip~protobuf_pip_deps_311_setuptools>C:/hostedtoolcache/windows/Python/3.9.13/x64/python3.exe -B -I -c "import sys; print(f\'***sys.prefix***\', end=\'\')" \x0d\x0aC:\hostedtoolcache\windows\Python\3.9.13\x64'
```

Commenting out the line in rules_python that sets PYTHONHOME does work around this problem and I'm able to successfully build. But it's not clear to me what other problems that might cause, and it's probably not the right solution

## 🔬 Minimal Reproduction

Any bazel repository using the pip extension should reproduce this on windows. For example, in https://github.com/protocolbuffers/protobuf, you can run:
`bazel test //python/google/protobuf/internal/numpy:numpy_test`

Note: you'll have to edit `python/requirements.txt` to not have any `<` symbols due to a separate bug I'll be filing another issue about.

## 🔥 Exception or Error

See description above. The error is from a corrupted python environment and not particularly helpful on its own

## 🌍 Your Environment

**Operating System:** Windows
**Output of `bazel version`:** Reproduces with Bazel 7 and 8
**Rules_python version:** 1.6.0

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Start with the pip extension's repository_ctx.execute call that derives PYTHONHOME, then reproduce on Windows using the protobuf target //python/google/protobuf/internal/numpy:numpy_test. Compare the command output with the intended Python path and verify that PYTHONHOME contains only the path, without the prompt or command text; confirm the reproduction succeeds with the affected rules_python versions.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
python
Lĩnh vực
build-system
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.