language/python: allow formulae to restrict access to system site packages

Also, clean up one use of an `options` hash, because this is no longer
needed.

Closes #11885.
This commit is contained in:
Carlo Cabrera 2021-09-21 13:18:54 +08:00
parent 91acec50f9
commit 09570fc7a6
No known key found for this signature in database
GPG Key ID: C74D447FC549A1D0

View File

@ -128,10 +128,10 @@ module Language
# or "python3.x") # or "python3.x")
# @param formula [Formula] the active {Formula} # @param formula [Formula] the active {Formula}
# @return [Virtualenv] a {Virtualenv} instance # @return [Virtualenv] a {Virtualenv} instance
def virtualenv_create(venv_root, python = "python", formula = self) def virtualenv_create(venv_root, python = "python", formula = self, system_site_packages: true)
ENV.refurbish_args ENV.refurbish_args
venv = Virtualenv.new formula, venv_root, python venv = Virtualenv.new formula, venv_root, python
venv.create venv.create(system_site_packages: system_site_packages)
# Find any Python bindings provided by recursive dependencies # Find any Python bindings provided by recursive dependencies
formula_deps = formula.recursive_dependencies formula_deps = formula.recursive_dependencies
@ -174,8 +174,7 @@ module Language
# formula preference for python or python@x.y, or to resolve an ambiguous # formula preference for python or python@x.y, or to resolve an ambiguous
# case where it's not clear whether python or python@x.y should be the # case where it's not clear whether python or python@x.y should be the
# default guess. # default guess.
def virtualenv_install_with_resources(options = {}) def virtualenv_install_with_resources(using: nil, system_site_packages: true)
python = options[:using]
if python.nil? if python.nil?
wanted = python_names.select { |py| needs_python?(py) } wanted = python_names.select { |py| needs_python?(py) }
raise FormulaUnknownPythonError, self if wanted.empty? raise FormulaUnknownPythonError, self if wanted.empty?
@ -184,7 +183,7 @@ module Language
python = wanted.first python = wanted.first
python = "python3" if python == "python" python = "python3" if python == "python"
end end
venv = virtualenv_create(libexec, python.delete("@")) venv = virtualenv_create(libexec, python.delete("@"), system_site_packages: system_site_packages)
venv.pip_install resources venv.pip_install resources
venv.pip_install_and_link buildpath venv.pip_install_and_link buildpath
venv venv
@ -215,10 +214,12 @@ module Language
# Obtains a copy of the virtualenv library and creates a new virtualenv on disk. # Obtains a copy of the virtualenv library and creates a new virtualenv on disk.
# #
# @return [void] # @return [void]
def create def create(system_site_packages: true)
return if (@venv_root/"bin/python").exist? return if (@venv_root/"bin/python").exist?
@formula.system @python, "-m", "venv", "--system-site-packages", @venv_root args = ["-m", "venv"]
args << "--system-site-packages" if system_site_packages
@formula.system @python, *args, @venv_root
# Robustify symlinks to survive python patch upgrades # Robustify symlinks to survive python patch upgrades
@venv_root.find do |f| @venv_root.find do |f|