Skip to content

Commit 708b07b

Browse files
authored
fix: make imports attribute target-relative for venv mode (#3572)
The `imports` attribute is treated as target-relative in non-venv mode, but venv-mode was passing the value through without the target-relative processing. This went unnoticed because the main use case, pypi packages, are a the repo root, so target and repo relative paths are the same. To fix, use join the input value to the target's path, as done in the non-venv `get_imports()` function. Fixes #3565
1 parent dddd7a2 commit 708b07b

File tree

16 files changed

+29
-26
lines changed

16 files changed

+29
-26
lines changed

python/private/py_library.bzl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,12 +246,24 @@ def _get_imports_and_venv_symlinks(ctx):
246246
fail("When venvs_site_packages is enabled, exactly one `imports` " +
247247
"value must be specified, got {}".format(imports))
248248

249+
site_packages_root = paths.normalize(paths.join(
250+
ctx.label.package,
251+
imports[0],
252+
))
253+
254+
# Prevent escaping out of the repo root.
255+
if site_packages_root.startswith("../") or site_packages_root == "..":
256+
fail(("Invalid `imports` value '{}': resolves to '{}' which is " +
257+
"above the repo root").format(
258+
imports[0],
259+
site_packages_root,
260+
))
249261
venv_symlinks = get_venv_symlinks(
250262
ctx,
251263
ctx.files.srcs + ctx.files.data + ctx.files.pyi_srcs,
252264
package,
253265
version_str,
254-
site_packages_root = imports[0],
266+
site_packages_root = site_packages_root,
255267
namespace_package_files = ctx.files.namespace_package_files,
256268
)
257269
else:

python/private/venv_runfiles.bzl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,8 @@ def _get_file_venv_path(ctx, f, site_packages_root):
250250
Args:
251251
ctx: The current ctx.
252252
f: The file to compute the venv_path for.
253-
site_packages_root: The site packages root path.
253+
site_packages_root: The site packages root path; repo-relative
254+
path.
254255
255256
Returns:
256257
A tuple `(venv_path, rf_root_path)` if the file is under

tests/base_rules/py_executable_base_tests.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ def _test_debugger(name, config):
194194
rt_util.helper_target(
195195
py_library,
196196
name = name + "_debugger_venv",
197-
imports = [native.package_name() + "/site-packages"],
197+
imports = ["site-packages"],
198198
experimental_venvs_site_packages = "@rules_python//python/config_settings:venvs_site_packages",
199199
srcs = [rt_util.empty_file("site-packages/" + name + "_debugger_venv.py")],
200200
)

tests/modules/other/nspkg_delta/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ py_library(
66
name = "nspkg_delta",
77
srcs = glob(["site-packages/**/*.py"]),
88
experimental_venvs_site_packages = "@rules_python//python/config_settings:venvs_site_packages",
9-
imports = [package_name() + "/site-packages"],
9+
imports = ["site-packages"],
1010
)

tests/modules/other/nspkg_gamma/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ py_library(
66
name = "nspkg_gamma",
77
srcs = glob(["site-packages/**/*.py"]),
88
experimental_venvs_site_packages = "@rules_python//python/config_settings:venvs_site_packages",
9-
imports = [package_name() + "/site-packages"],
9+
imports = ["site-packages"],
1010
)

tests/modules/other/nspkg_single/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ py_library(
66
name = "nspkg_single",
77
srcs = glob(["site-packages/**/*.py"]),
88
experimental_venvs_site_packages = "@rules_python//python/config_settings:venvs_site_packages",
9-
imports = [package_name() + "/site-packages"],
9+
imports = ["site-packages"],
1010
)

tests/modules/other/simple_v1/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ py_library(
1010
exclude = ["site-packages/**/*.py"],
1111
),
1212
experimental_venvs_site_packages = "@rules_python//python/config_settings:venvs_site_packages",
13-
imports = [package_name() + "/site-packages"],
13+
imports = ["site-packages"],
1414
)

tests/modules/other/simple_v2/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ py_library(
1010
exclude = ["site-packages/**/*.py"],
1111
),
1212
experimental_venvs_site_packages = "@rules_python//python/config_settings:venvs_site_packages",
13-
imports = [package_name() + "/site-packages"],
13+
imports = ["site-packages"],
1414
pyi_srcs = glob(["**/*.pyi"]),
1515
)

tests/modules/other/with_external_data/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,5 @@ py_library(
1919
srcs = ["site-packages/with_external_data.py"],
2020
data = [":external_data"],
2121
experimental_venvs_site_packages = "@rules_python//python/config_settings:venvs_site_packages",
22-
imports = [package_name() + "/site-packages"],
22+
imports = ["site-packages"],
2323
)

tests/py_zipapp/BUILD.bazel

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,5 @@ py_library(
8181
name = "some_dep",
8282
srcs = ["some_dep.py"],
8383
experimental_venvs_site_packages = "//python/config_settings:venvs_site_packages",
84-
imports = select({
85-
":is_venvs_site_packages_enabled": ["tests/py_zipapp"],
86-
"//conditions:default": ["."],
87-
}),
88-
)
89-
90-
config_setting(
91-
name = "is_venvs_site_packages_enabled",
92-
flag_values = {
93-
"//python/config_settings:venvs_site_packages": "yes",
94-
},
84+
imports = ["."],
9585
)

0 commit comments

Comments
 (0)