Python: allow --no-build-isolation for pip install

This commit is contained in:
David Baumgold 2023-04-01 11:31:29 +02:00
parent 931327df1f
commit 38a2703aa7
2 changed files with 21 additions and 10 deletions

View File

@ -264,14 +264,14 @@ module Language
# Multiline strings are allowed and treated as though they represent
# the contents of a `requirements.txt`.
# @return [void]
def pip_install(targets)
def pip_install(targets, build_isolation: true)
targets = Array(targets)
targets.each do |t|
if t.respond_to? :stage
t.stage { do_install Pathname.pwd }
t.stage { do_install(Pathname.pwd, build_isolation: build_isolation) }
else
t = t.lines.map(&:strip) if t.respond_to?(:lines) && t.include?("\n")
do_install t
do_install(t, build_isolation: build_isolation)
end
end
end
@ -281,11 +281,11 @@ module Language
#
# @param (see #pip_install)
# @return (see #pip_install)
def pip_install_and_link(targets, link_manpages: false)
def pip_install_and_link(targets, link_manpages: false, build_isolation: true)
bin_before = Dir[@venv_root/"bin/*"].to_set
man_before = Dir[@venv_root/"share/man/man*/*"].to_set if link_manpages
pip_install(targets)
pip_install(targets, build_isolation: build_isolation)
bin_after = Dir[@venv_root/"bin/*"].to_set
bin_to_link = (bin_after - bin_before).to_a
@ -301,12 +301,15 @@ module Language
private
def do_install(targets)
def do_install(targets, build_isolation: true)
targets = Array(targets)
@formula.system @venv_root/"bin/pip", "install",
"-v", "--no-deps", "--no-binary", ":all:",
"--use-feature=no-binary-enable-wheel-cache",
"--ignore-installed", *targets
args = [
"-v", "--no-deps", "--no-binary", ":all:",
"--use-feature=no-binary-enable-wheel-cache",
"--ignore-installed"
]
args << "--no-build-isolation" if not build_isolation
@formula.system @venv_root/"bin/pip", "install", args, *targets
end
end
end

View File

@ -67,6 +67,14 @@ describe Language::Python::Virtualenv::Virtualenv, :needs_python do
virtualenv.pip_install res
end
it "works without build isolation" do
expect(formula).to receive(:system)
.with(dir/"bin/pip", "install", "-v", "--no-deps", "--no-binary", ":all:",
"--use-feature=no-binary-enable-wheel-cache", "--ignore-installed", "--no-build-isolation", "foo")
.and_return(true)
virtualenv.pip_install("foo", build_isolation: false)
end
end
describe "#pip_install_and_link" do