【发布时间】:2017-06-06 21:51:11
【问题描述】:
我目前正在尝试升级 pip,然后在 python 脚本中安装 paramiko,因为脚本本身使用了 paramiko。下面是我想要完成的一个简单案例
import pip
try:
import paramiko
except ImportError:
pip.main(["install", "--upgrade", "pip"])
reload(pip)
pip.main(["install", "--user", "paramiko"])
import paramiko
ssh = paramiko.SSHClient()
我正在使用 python 2.7 的 Ubuntu 16.04 VM 中运行此脚本,该 VM 没有 paramiko 和 pip 版本 8.1.1。对于运行脚本后 pip 升级的输出,我得到:
收集 pip 下载 pip-9.0.1-py2.py3-none-any.whl (1.3MB) 100% |████████████████████████████████| 1.3MB 712kB/s 安装采集包:pip 安装成功 pip-8.1.1 你正在使用 pip 版本 8.1.1,但是版本 9.0.1 可用。你应该 考虑通过“pip install --upgrade pip”命令进行升级。
之后,它尝试按预期安装 paramiko,但它失败了,因为它基本上无法安装 paramiko 使用的 Cryptography 依赖项。但是,如果它使用升级后的 pip,这将不是问题。我已将 VM 恢复到以前的快照以手动安装 paramiko,方法是
pip install --upgrade pip
pip install --user paramiko
在 shell 中它可以工作,但我需要能够在脚本中执行此操作。
注意,我还将虚拟机恢复到以前的快照,并尝试在 shell 中使用上述命令安装 paramiko,但没有先执行 pip 升级,并且正如预期的那样,我得到了与脚本在尝试时给出的相同的错误安装 paramiko。 现在我通过尝试在脚本中包含它进行了一些测试:
pip.main(["install", "--upgrade", "pip"])
reload(pip)
pip.main(["install", "--upgrade", "pip"])
reload(pip)
至于我得到的输出:
收集点
正在下载 pip-9.0.1-py2.py3-none-any.whl (1.3MB)100% |████████████████████████████████| 1.3MB 712kB/s Installing collected packages: pip Successfully installed pip-8.1.1 You are using pip version 8.1.1, however version 9.0.1 is available.您应该考虑通过“pip install --upgrade pip”命令进行升级。
收集点
使用缓存的 pip-9.0.1-py2.py3-none-any.whl安装收集的包:pip 安装成功 pip-8.1.1
您使用的是 pip 版本 8.1.1,但版本 9.0.1 可用。
您应该考虑通过“pip install --upgrade pip”命令进行升级。
注意它是如何在第二次 pip 升级时使用缓存的 pip-9.0.1 的。这是否意味着重新加载后,脚本正在使用 pip 9.0.1?如果是这样,那么为什么 paramiko 安装不使用升级的 pip?如何让 paramiko 使用升级后的 pip?
【问题讨论】:
-
您可能需要在此之前运行
sudo apt-get install build-essential libssl-dev libffi-dev python-dev -y,因为密码库需要它们。 -
我现在正试图避免使用 sudo,因为此脚本稍后可能会在权限受到限制的 VM 上运行,而且我还试图将安装/更改的数量降至最低系统。
标签: python-2.7