diff --git a/lib/resources/pip.rb b/lib/resources/pip.rb index 7cf8072e9..624ff0d10 100644 --- a/lib/resources/pip.rb +++ b/lib/resources/pip.rb @@ -4,6 +4,7 @@ # describe pip('Jinja2') do # it { should be_installed } # end +# class PipPackage < Vulcano.resource(1) name 'pip' @@ -17,7 +18,31 @@ class PipPackage < Vulcano.resource(1) @info = {} @info[:type] = 'pip' - cmd = vulcano.run_command("pip show #{@package_name}") + # Pip is not on the default path for Windows, therefore we do some logic + # to find the binary on Windows + family = vulcano.os[:family] + case family + when 'windows' + # we need to detect the pip command on Windows + cmd = vulcano.run_command('New-Object -Type PSObject | Add-Member -MemberType NoteProperty -Name Pip -Value (Invoke-Command -ScriptBlock {where.exe pip}) -PassThru | Add-Member -MemberType NoteProperty -Name Python -Value (Invoke-Command -ScriptBlock {where.exe python}) -PassThru | ConvertTo-Json') + begin + paths = JSON.parse(cmd.stdout) + # use pip if it on system path + pipcmd = paths['Pip'] + # calculate path on windows + if defined?(paths['Python']) && pipcmd.nil? + pipdir = paths['Python'].split('\\') + # remove python.exe + pipdir.pop + pipcmd = pipdir.push('Scripts').push('pip.exe').join('/') + end + rescue JSON::ParserError => _e + return nil + end + end + + pipcmd ||= 'pip' + cmd = vulcano.run_command("#{pipcmd} show #{@package_name}") return @info if cmd.exit_status != 0 params = SimpleConfig.new(