@@ -576,8 +576,10 @@ def _create_venv(ctx, output_prefix, imports, runtime_details, add_runfiles_root
576576 )
577577
578578 venv_dir_map = {
579- VenvSymlinkKind .BIN : venv_details .bin_dir ,
579+ VenvSymlinkKind .BIN : "{}/{}" . format ( venv_ctx_rel_root , venv_details .bin_dir ) ,
580580 VenvSymlinkKind .LIB : site_packages ,
581+ VenvSymlinkKind .INCLUDE : "{}/{}" .format (venv_ctx_rel_root , venv_details .include_dir ),
582+ VenvSymlinkKind .DATA : "{}/data" .format (venv_ctx_rel_root ),
581583 }
582584 venv_app_files = create_venv_app_files (
583585 ctx ,
@@ -659,7 +661,7 @@ def _create_venv_unixy(ctx, *, venv_ctx_rel_root, runtime, interpreter_actual_pa
659661
660662 recreate_venv_at_runtime = False
661663
662- bin_dir = "{}/bin" .format (venv_ctx_rel_root )
664+ venv_bin_ctx_rel_path = "{}/bin" .format (venv_ctx_rel_root )
663665 if create_full_venv :
664666 # Some wrappers around the interpreter (e.g. pyenv) use the program
665667 # name to decide what to do, so preserve the name.
@@ -671,15 +673,15 @@ def _create_venv_unixy(ctx, *, venv_ctx_rel_root, runtime, interpreter_actual_pa
671673 # When the venv symlinks are disabled, the $venv/bin/python3 file isn't
672674 # needed or used at runtime. However, the zip code uses the interpreter
673675 # File object to figure out some paths.
674- interpreter = ctx .actions .declare_file ("{}/{}" .format (bin_dir , py_exe_basename ))
676+ interpreter = ctx .actions .declare_file ("{}/{}" .format (venv_bin_ctx_rel_path , py_exe_basename ))
675677 ctx .actions .write (interpreter , "actual:{}" .format (interpreter_actual_path ))
676678
677679 elif runtime .interpreter :
678680 # Even though ctx.actions.symlink() is used, using
679681 # declare_symlink() is required to ensure that the resulting file
680682 # in runfiles is always a symlink. An RBE implementation, for example,
681683 # may choose to write what symlink() points to instead.
682- interpreter = ctx .actions .declare_symlink ("{}/{}" .format (bin_dir , py_exe_basename ))
684+ interpreter = ctx .actions .declare_symlink ("{}/{}" .format (venv_bin_ctx_rel_path , py_exe_basename ))
683685 interpreter_runfiles .add (interpreter )
684686
685687 rel_path = relative_path (
@@ -690,7 +692,7 @@ def _create_venv_unixy(ctx, *, venv_ctx_rel_root, runtime, interpreter_actual_pa
690692 )
691693 ctx .actions .symlink (output = interpreter , target_path = rel_path )
692694 else :
693- interpreter = ctx .actions .declare_symlink ("{}/{}" .format (bin_dir , py_exe_basename ))
695+ interpreter = ctx .actions .declare_symlink ("{}/{}" .format (venv_bin_ctx_rel_path , py_exe_basename ))
694696 interpreter_runfiles .add (interpreter )
695697 ctx .actions .symlink (output = interpreter , target_path = runtime .interpreter_path )
696698 else :
@@ -715,7 +717,8 @@ def _create_venv_unixy(ctx, *, venv_ctx_rel_root, runtime, interpreter_actual_pa
715717 interpreter = interpreter ,
716718 pyvenv_cfg = pyvenv_cfg ,
717719 site_packages = site_packages ,
718- bin_dir = bin_dir ,
720+ bin_dir = "bin" ,
721+ include_dir = "include" ,
719722 recreate_venv_at_runtime = recreate_venv_at_runtime ,
720723 interpreter_runfiles = interpreter_runfiles .build (ctx ),
721724 interpreter_symlinks = depset (),
@@ -777,7 +780,8 @@ def _create_venv_windows(ctx, *, venv_ctx_rel_root, runtime, interpreter_actual_
777780 interpreter = interpreter ,
778781 pyvenv_cfg = None ,
779782 site_packages = site_packages ,
780- bin_dir = venv_bin_ctx_rel_path ,
783+ bin_dir = venv_bin_rel_path ,
784+ include_dir = "Include" ,
781785 recreate_venv_at_runtime = True ,
782786 interpreter_runfiles = interpreter_runfiles .build (ctx ),
783787 interpreter_symlinks = interpreter_symlinks .build (),
@@ -789,6 +793,7 @@ def _venv_details(
789793 pyvenv_cfg ,
790794 site_packages ,
791795 bin_dir ,
796+ include_dir ,
792797 recreate_venv_at_runtime ,
793798 interpreter_runfiles ,
794799 interpreter_symlinks ):
@@ -801,8 +806,10 @@ def _venv_details(
801806 pyvenv_cfg = pyvenv_cfg ,
802807 # str; venv-relative path to the site-packages directory
803808 site_packages = site_packages ,
804- # str; ctx -relative path to the venv's bin directory.
809+ # str; venv -relative path to the venv's bin directory.
805810 bin_dir = bin_dir ,
811+ # str; venv-relative-path to the venv's include directory.
812+ include_dir = include_dir ,
806813 # bool; True if the venv needs to be recreated at runtime (because the
807814 # build-time construction isn't sufficient). False if the build-time
808815 # constructed venv is sufficient.
0 commit comments