Skip to content

Commit c58fbce

Browse files
committed
Install setup tools and virtualenv (on py2) during runtime install.
1 parent d892c76 commit c58fbce

1 file changed

Lines changed: 39 additions & 5 deletions

File tree

  • lib/poise_python/python_providers

lib/poise_python/python_providers/base.rb

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ def action_install
4141
notifying_block do
4242
install_python
4343
install_pip
44+
install_setuptools
45+
install_virtualenv
4446
end
4547
end
4648

@@ -91,19 +93,51 @@ def uninstall_python
9193
#
9294
# @return [void]
9395
def install_pip
94-
return unless options[:pip_version]
96+
pip_version_or_url = options[:pip_version]
97+
return unless pip_version_or_url
9598
# If there is a : in the version, use it as a URL.
96-
pip_version = options[:pip_version]
97-
is_url = pip_version.is_a?(String) && pip_version.include?(':')
99+
if pip_version_or_url.is_a?(String) && pip_version_or_url.include?(':')
100+
pip_version = nil
101+
pip_url = pip_version_or_url
102+
else
103+
pip_version = pip_version_or_url
104+
pip_url = nil
105+
end
106+
Chef::Log.debug("[#{new_resource}] Installing pip #{pip_version || 'latest'}")
107+
# Install or bootstrap pip.
98108
python_runtime_pip new_resource.name do
99109
parent new_resource
100110
# If the version is `true`, don't pass it at all.
101-
version pip_version if !is_url && pip_version.is_a?(String)
102-
get_pip_url pip_version if is_url
111+
version pip_version if pip_version.is_a?(String)
112+
get_pip_url pip_url if pip_url
103113
end
104114
end
105115

106116
def install_setuptools
117+
# Captured because #options conflicts with Chef::Resource::Package#options.
118+
setuptools_version = options[:setuptools_version]
119+
return unless setuptools_version
120+
Chef::Log.debug("[#{new_resource}] Installing setuptools #{setuptools_version == true ? 'latest' : setuptools_version}")
121+
# Install setuptools via pip.
122+
python_package 'setuptools' do
123+
parent_python new_resource
124+
version setuptools_version if setuptools_version.is_a?(String)
125+
end
126+
end
127+
128+
def install_virtualenv
129+
# Captured because #options conflicts with Chef::Resource::Package#options.
130+
virtualenv_version = options[:virtualenv_version]
131+
return unless virtualenv_version
132+
# Check if the venv module exists.
133+
cmd = shell_out([python_binary, '-m', 'venv', '-h'])
134+
return unless cmd.error?
135+
Chef::Log.debug("[#{new_resource}] Installing virtualenv #{virtualenv_version == true ? 'latest' : virtualenv_version}")
136+
# Install virtualenv via pip.
137+
python_package 'virtualenv' do
138+
parent_python new_resource
139+
version virtualenv_version if virtualenv_version.is_a?(String)
140+
end
107141
end
108142

109143
end

0 commit comments

Comments
 (0)