Skip to content

Commit

Permalink
Add an option to create arch specific, python version independent pkgs
Browse files Browse the repository at this point in the history
  • Loading branch information
isuruf committed Aug 12, 2024
1 parent 7816bc8 commit 65657d8
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 5 deletions.
12 changes: 9 additions & 3 deletions conda_build/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -1443,12 +1443,13 @@ def create_info_files(m, replacements, files, prefix):


def get_short_path(m, target_file):
if m.python_version_independent:
if target_file.find("site-packages") >= 0:
return target_file[target_file.find("site-packages") :]
if m.noarch == "python":
entry_point_script_names = get_entry_point_script_names(
m.get_value("build/entry_points")
)
if target_file.find("site-packages") >= 0:
return target_file[target_file.find("site-packages") :]
elif target_file.startswith("bin") and (
target_file not in entry_point_script_names
):
Expand Down Expand Up @@ -1667,6 +1668,11 @@ def post_process_files(m: MetaData, initial_prefix_files):
noarch_python.populate_files(
m, pkg_files, host_prefix, entry_point_script_names
)
elif python_version_independent:
# For non noarch: python ones, we don't need to handle entry points in a special way.
noarch_python.populate_files(
m, pkg_files, host_prefix, []
)

current_prefix_files = utils.prefix_files(prefix=host_prefix)
new_files = current_prefix_files - initial_prefix_files
Expand Down Expand Up @@ -3073,7 +3079,7 @@ def _set_env_variables_for_build(m, env):
# locally, and if we don't, it's a problem.
env["PIP_NO_INDEX"] = True

if m.noarch == "python":
if m.python_version_independent:
env["PYTHONDONTWRITEBYTECODE"] = True

# The stuff in replacements is not parsable in a shell script (or we need to escape it)
Expand Down
17 changes: 17 additions & 0 deletions conda_build/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -605,6 +605,7 @@ def parse(data, config, path=None):
"script": list,
"noarch": str,
"noarch_python": bool,
"python_version_independent": bool,
"has_prefix_files": None,
"binary_has_prefix_files": None,
"ignore_prefix_files": None,
Expand Down Expand Up @@ -1811,6 +1812,10 @@ def info_index(self):
build_noarch = self.get_value("build/noarch")
if build_noarch:
d["noarch"] = build_noarch
elif self.python_version_independent:
# This is a hack to make conda/mamba/micromamba compile the pure python files
# and for micromamba to move the files in site-packages to the correct dir.
d["noarch"] = "python"
if self.is_app():
d.update(self.app_meta())
return d
Expand Down Expand Up @@ -2291,6 +2296,14 @@ def copy(self: Self) -> MetaData:
)
return new

@property
def python_version_independent(self):
return (
self.get_value("build/python_version_independent")
or self.get_value("build/noarch") == "python"
or self.noarch_python
)

@property
def noarch(self):
return self.get_value("build/noarch")
Expand Down Expand Up @@ -2442,6 +2455,10 @@ def get_output_metadata(self, output):
output_metadata.final = False
output_metadata.noarch = output.get("noarch", False)
output_metadata.noarch_python = output.get("noarch_python", False)
output_metadata.python_version_independent = (
output.get("python_version_independent")
or output_metadata.noarch == "python"
)
# primarily for tests - make sure that we keep the platform consistent (setting noarch
# would reset it)
if (
Expand Down
4 changes: 3 additions & 1 deletion conda_build/render.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ def get_pin_from_build(m, dep, build_dep_versions):
if (
version
and dep_name in m.config.variant.get("pin_run_as_build", {})
and not (dep_name == "python" and (m.noarch or m.noarch_python))
and not (dep_name == "python" and m.python_version_independent)
and dep_name in build_dep_versions
):
pin_cfg = m.config.variant["pin_run_as_build"][dep_name]
Expand Down Expand Up @@ -408,6 +408,8 @@ def get_upstream_pins(m: MetaData, precs, env):
precs = [prec for prec in precs if prec.name in explicit_specs]

ignore_pkgs_list = utils.ensure_list(m.get_value("build/ignore_run_exports_from"))
if m.python_version_independent and not m.noarch:
ignore_pkgs_list.append("python")
ignore_list = utils.ensure_list(m.get_value("build/ignore_run_exports"))
additional_specs = {}
for prec in precs:
Expand Down
2 changes: 2 additions & 0 deletions conda_build/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -1058,6 +1058,7 @@ def iter_entry_points(items):


def create_entry_point(path, module, func, config):
"""Creates an entry point for legacy noarch_python builds"""
import_name = func.split(".")[0]
pyscript = PY_TMPL % {"module": module, "func": func, "import_name": import_name}
if on_win:
Expand All @@ -1081,6 +1082,7 @@ def create_entry_point(path, module, func, config):


def create_entry_points(items, config):
"""Creates entry points for legacy noarch_python builds"""
if not items:
return
bin_dir = join(config.host_prefix, bin_dirname)
Expand Down
2 changes: 1 addition & 1 deletion conda_build/windows.py
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ def build_vcvarsall_cmd(cmd, arch=arch_selector):

def write_build_scripts(m, env, bld_bat):
env_script = join(m.config.work_dir, "build_env_setup.bat")
if m.noarch == "python":
if m.python_version_independent:
env["PYTHONDONTWRITEBYTECODE"] = True
import codecs

Expand Down

0 comments on commit 65657d8

Please sign in to comment.