【发布时间】:2017-09-28 01:11:00
【问题描述】:
我在运行 pip install 时遇到不安全的平台和 sni 缺少警告。我一直在尝试按照以下错误消息中建议的说明进行操作,但没有成功:
https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning https://urllib3.readthedocs.io/en/latest/security.html#snimissingwarning https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2
我写了一个小的 Vagrant 文件和 Chef 食谱来演示这个问题,也许可以得到一些帮助。每次安装 pip 包之前都会显示警告。我还尝试了 pip 安装选项的各种组合并改变了 pip 版本(8.1.2 与 9.0.1)。任何帮助表示赞赏。
包含以下代码的公共 GitHub 存储库:https://github.com/marc-swingler/urllib_issue
要求:Vagrant 和 VirtualBox
运行:流浪
更新:: 找到这个帖子https://github.com/pypa/pip/issues/4098
事实证明 pip 9.0.1 并不能很好地发挥作用,因为它捆绑了库。此外,安装 ndg-httpsclient 而不是 urllib3 和/或请求。用户指南中提到的 apt 包不是必需的,也不需要从头开始构建,您可以使用轮子。安装 ndg-httpsclient 后,警告就会消失,其他 pip 安装也会顺利进行。我也有一个版本,我使用 apt python-pip 包引导 pip 。 (如果有人感兴趣,我会发布它。) Apt 最初安装 pip v1.5.4。然后脚本更新到 pip 8.1.2 并类似于下面的代码。只需在升级 pip 时删除“--disable-pip-version-check”选项即可。
流浪文件:
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "private_network", type: "dhcp"
config.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'"
config.vm.provision "chef_solo" do |chef|
chef.add_recipe("foo")
end
config.vm.provider "virtualbox" do |v|
v.memory = 4096
end
end
cookbooks/foo/recipes/default.rb:
pip_installer_path = '/tmp/get-pip.py'
remote_file "download_pip_installer" do
path pip_installer_path
source 'https://bootstrap.pypa.io/get-pip.py'
owner 'root'
group 'root'
mode '0500'
not_if 'which pip'
end
execute 'bootstrap_pip' do
command "python #{pip_installer_path}"
not_if "which pip"
end
cookbook_file 'delete_pip_installer' do
path pip_installer_path
action :delete
end
pip_packages = {
'pip' => { 'version' => '8.1.2', 'extras' => nil },
'ndg-httpsclient' => { 'version' => '0.4.3', 'extras' => nil },
'botocore' => { 'version' => '1.7.18', 'extras' => nil },
'pystache' => { 'version' => '0.5.4', 'extras' => nil }
}
pip_packages.each do |package_name, package_info|
package_version = package_info['version']
package_extras = package_info['extras']
package_spec = package_name
unless package_extras.nil? or package_extras.length < 1
package_spec = package_spec + '['
package_extras.each do |package_extra|
package_spec = package_spec + package_extra + ','
end
package_spec[-1] = ']'
end
package_spec = package_spec + '==' + package_version
execute package_spec do
command "pip --disable-pip-version-check install -U #{package_spec}"
not_if "test #{package_version} = `pip --disable-pip-version-check list 2>/dev/null | sed -rn 's/^#{package_name} \\(([0-9.]+)\\)/\\1/p'`"
end
end
食谱/metadata.rb
name 'foo'
maintainer 'foo'
maintainer_email 'foo@foo.com'
license 'foo'
description 'foo'
long_description 'foo'
version '0.0.0'
【问题讨论】: