在Mac上将Ansible版本从1.9.4升级到2.2.0时,遇到了pip错误

在升级到Ansible2时遇到困难。

以前,当升级Ansible从Ver1.7到Ver1.9的时候,我也遇到了类似的问题,花费了相当多的时间。这次我又以相同的方式遇到了困难,所以我将其作为备忘录留下来。由于我自己也是一个菜鸟,如果能对处于相同境遇的人有所帮助,我将非常高兴。值得注意的是,本文将省略有关Ansible的解释和安装方法。同时,也省略了部分命令的结果。

环境

    • MacOS Sierra Ver10.12.1

 

    • Homebrew Ver1.1.1

 

    • Ansible ver1.9.4 → ver2.2.0

 

    • Python Ver2.7.10

 

    pip Ver 8.1.2 → Ver9.0.1

Ansible版本升级方法

在我这种情况下,据说可以通过以下命令进行版本升级。

  ~ pip install ansible

实际尝试过之后

基本上只需要使用上述的命令就好,但实际尝试后出现以下错误,无法正常运行。。。

###Ansibleのバージョン###
ansible --version
ansible 1.9.4
  configured module search path = None
###Ansibleバージョンアップコマンド###
  ~ pip install ansible
Collecting ansible
  Downloading ansible-2.2.0.0.tar.gz (2.4MB)
    100% |################################| 2.4MB 443kB/s
Collecting paramiko (from ansible)
  Downloading paramiko-2.0.2-py2.py3-none-any.whl (171kB)
    100% |################################| 174kB 2.6MB/s
Collecting jinja2 (from ansible)
  Downloading Jinja2-2.8-py2.py3-none-any.whl (263kB)
    100% |################################| 266kB 2.5MB/s
Collecting PyYAML (from ansible)
  Downloading PyYAML-3.12.tar.gz (253kB)
    100% |################################| 256kB 2.1MB/s
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/local/lib/python2.7/site-packages (from ansible)
Collecting pycrypto>=2.6 (from ansible)
  Downloading pycrypto-2.6.1.tar.gz (446kB)
    100% |################################| 450kB 1.8MB/s
Collecting pyasn1>=0.1.7 (from paramiko->ansible)
  Downloading pyasn1-0.1.9-py2.py3-none-any.whl
Collecting cryptography>=1.1 (from paramiko->ansible)
  Downloading cryptography-1.5.3-cp27-cp27m-macosx_10_10_intel.whl (2.4MB)
    100% |################################| 2.4MB 429kB/s
Collecting MarkupSafe (from jinja2->ansible)
  Downloading MarkupSafe-0.23.tar.gz
Collecting cffi>=1.4.1 (from cryptography>=1.1->paramiko->ansible)
  Downloading cffi-1.9.1-cp27-cp27m-macosx_10_10_intel.whl (214kB)
    100% |################################| 215kB 2.9MB/s
Collecting six>=1.4.1 (from cryptography>=1.1->paramiko->ansible)
  Downloading six-1.10.0-py2.py3-none-any.whl
Collecting idna>=2.0 (from cryptography>=1.1->paramiko->ansible)
  Downloading idna-2.1-py2.py3-none-any.whl (54kB)
    100% |################################| 61kB 2.2MB/s
Collecting ipaddress (from cryptography>=1.1->paramiko->ansible)
  Downloading ipaddress-1.0.17-py2-none-any.whl
Collecting enum34 (from cryptography>=1.1->paramiko->ansible)
  Downloading enum34-1.1.6-py2-none-any.whl
Collecting pycparser (from cffi>=1.4.1->cryptography>=1.1->paramiko->ansible)
  Downloading pycparser-2.17.tar.gz (231kB)
    100% |################################| 235kB 3.1MB/s
Building wheels for collected packages: ansible, PyYAML, pycrypto, MarkupSafe, pycparser
  Running setup.py bdist_wheel for ansible  done


Successfully built ansible PyYAML pycrypto MarkupSafe pycparser
Installing collected packages: pyasn1, pycparser, cffi, six, idna, ipaddress, enum34, cryptography, paramiko, MarkupSafe, jinja2, PyYAML, pycrypto, ansible
IOError: [Errno 13] Permission denied: '/usr/local/bin/ansible'
You are using pip version 8.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

权限

首先,由于出现了IOError: [Errno 13] Permission denied: ‘/usr/local/bin/ansible’的错误提示,说明没有权限访问该路径。因此,尝试使用sudo命令来执行。
执行后,以上提到的一行错误信息会消失。

升级pip

你正在使用的是pip版本8.1.2,但是有可用的9.0.1版本。
你应该考虑通过’pip install –upgrade pip’命令进行升级。由于这个告诉了我要升级pip,所以我运行了这个命令。

然后,以下是结果。

###pipアップグレード###
  ~ sudo pip install --upgrade pip
sudo: pip: command not found

当我在谷歌上搜索后,发现了一个在GitHub上与这个相同情况的问题(https://github.com/pypa/pip/issues/3761),我决定利用它作为参考。

因为以下的回答看起来像是一种方法,所以我立马尝试了一下。

对这些目录你没有读写权限。假设你有管理员权限,你可以用sudo chown -R $USER /绝对路径/到/目录来更改权限。如果你使用的是OS X 10.11+系统,你可能还需要禁用系统完整性保护,但别忘了在完成后重新启用它(以确保安全)。

将系统完整性保护关闭并向目标目录添加权限。

如果操作系统是Mac的OS X 10.11或更高版本,并且需要禁用System Integrity Protection,那么需要更改Python库所在目录及其内部文件的所有者。

关闭系统完整性保护

请参考OS X 10.11 El Capitan关于系统完整性保护(SIP)的详细信息。

我使用了引用中提到的《如何在OS X El Capitan中禁用系统完整性保护(rootless)》作为参考,以将System Integrity Protection禁用。

如果System Integrity Protection的状态处于禁用状态,则不需要执行此步骤,因此我们需要通过以下命令来检查其状态。然后,根据需要,按照步骤将其设置为禁用状态。

###SIPの状態確認###
  ~ csrutil status
System Integrity Protection status: enabled.

1. 在重新启动后,按下 command + R 进入恢复模式进行启动。
2. 打开「实用工具」→「终端」,输入以下命令。

###SIPをdisable + 再起動###
csrutil disable; reboot

3.如果重新启动,请再次确认状态。

###SIPの状態確認###
  ~ csrutil status
System Integrity Protection status: disabled.

在目标目录中添加权限

按照被引用的说法,尝试更改Python库所在的目录及其内容的所有者,并进行pip的升级。

###所有者変更###
  ~ sudo chown -R $USER /usr/local/lib/python2.7
Password:
###pipアップグレード###
  ~ sudo pip install --upgrade pip
sudo: pip: command not found

重新安装Homebrew

再次遇到了pip: command not found的问题…
这真令人沮丧。然而,只要回到之前的GitHub页面,稍往下看,就会发现一点救命稻草!!

在我让系统管理员为我设置工作网络后,我发现多个文件的权限被她默认更改了。这导致我安装的Homebrew出现了一些问题,其中之一就是Homebrew的pip安装。我的解决方法是卸载然后重新安装Homebrew。

总结一下,提问者说Homebrew安装后就好了,好像是Homebrew出了点问题。所以我也要重新安装Homebrew!

###Homebrewアンインストール###
  ~ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"tall)"
Warning: This script will remove:
Are you sure you want to uninstall Homebrew? [y/N] y
==> Removing Homebrew installation...
==> Removing empty directories...
Password:
==> Homebrew uninstalled!
You may wish to remove them yourself.
###Homebrewインストール###
➜  ~ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
==> This script will install:
Press RETURN to continue or any other key to abort
Password:
==> Installation successful!

使用pip进行安装

当我在这里不知为何忽然开始担心pip是否正常存在时,我试着去确认一下…

###pipの所在確認###
➜  ~ which pip
pip not found

没有pip…笑
于是安装

###pipインストール###
➜  ~ python -m ensurepip
Ignoring indexes: https://pypi.python.org/simple
Requirement already satisfied (use --upgrade to upgrade): setuptools in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Collecting pip
Installing collected packages: pip
  OSError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/pip'
➜  ~ sudo python -m ensurepip
Password:
Installing collected packages: pip
Successfully installed pip-6.1.1

升级Ansible版本

现在,pip已经成功安装,我终于可以输入我一直想打的命令了。

  ~ sudo pip install --upgrade pip
  Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
    100% |################################| 1.3MB 354kB/s
Installing collected packages: pip
  Found existing installation: pip 6.1.1
    Uninstalling pip-6.1.1:
      Successfully uninstalled pip-6.1.1
Successfully installed pip-9.0.1
  ~ sudo pip install ansible
The directory ~~~
Collecting ansible
Collecting jinja2 (from ansible)
  Downloading Jinja2-2.8-py2.py3-none-any.whl (263kB)
    100% |################################| 266kB 2.5MB/s
Collecting PyYAML (from ansible)
Collecting pycrypto>=2.6 (from ansible)
Collecting paramiko (from ansible)
  Downloading paramiko-2.0.2-py2.py3-none-any.whl (171kB)
    100% |################################| 174kB 3.8MB/s
Requirement already satisfied: setuptools in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from ansible)
Collecting MarkupSafe (from jinja2->ansible)
Collecting cryptography>=1.1 (from paramiko->ansible)
  Downloading cryptography-1.5.3-cp27-cp27m-macosx_10_10_intel.whl (2.4MB)
    100% |################################| 2.4MB 453kB/s
Collecting pyasn1>=0.1.7 (from paramiko->ansible)
  Downloading pyasn1-0.1.9-py2.py3-none-any.whl
Collecting idna>=2.0 (from cryptography>=1.1->paramiko->ansible)
  Downloading idna-2.1-py2.py3-none-any.whl (54kB)
    100% |################################| 61kB 6.7MB/s
Collecting ipaddress (from cryptography>=1.1->paramiko->ansible)
  Downloading ipaddress-1.0.17-py2-none-any.whl
Collecting enum34 (from cryptography>=1.1->paramiko->ansible)
  Downloading enum34-1.1.6-py2-none-any.whl
Collecting cffi>=1.4.1 (from cryptography>=1.1->paramiko->ansible)
  Downloading cffi-1.9.1-cp27-cp27m-macosx_10_10_intel.whl (214kB)
    100% |################################| 215kB 3.0MB/s
Requirement already satisfied: six>=1.4.1 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from cryptography>=1.1->paramiko->ansible)
Collecting pycparser (from cffi>=1.4.1->cryptography>=1.1->paramiko->ansible)
Installing collected packages: MarkupSafe, jinja2, PyYAML, pycrypto, idna, ipaddress, enum34, pyasn1, pycparser, cffi, cryptography, paramiko, ansible
Successfully installed MarkupSafe-0.23 PyYAML-3.12 ansible-2.2.0.0 cffi-1.9.1 cryptography-1.5.3 enum34-1.1.6 idna-2.1 ipaddress-1.0.17 jinja2-2.8 paramiko-2.0.2 pyasn1-0.1.9 pycparser-2.17 pycrypto-2.6.1
  ~ ansible --version
ansible 2.2.0.0
  config file =
  configured module search path = Default w/o overrides

将System Integrity Protection打开

最终成功将SIP重新启用,并顺利完成了Ansible的升级。

➜ ~ csrutil状态
系统完整性保护状态:已禁用。

1. 重新启动后,使用 command + R 进入恢复模式。
2. 打开「实用工具」→「终端」,输入以下命令。

###SIPをdisable + 再起動###
csrutil enable; reboot

当再启动后,请再次确认状态。

###SIPの状態確認###
  ~ csrutil status
System Integrity Protection status: enabled.

在最后…

我虽然还不太熟悉,但今后计划开始创建用于构建和配置Windows Server的Ansible playbook。最初的目的是因为听说可以扩展到Windows上的功能越来越多,想试试Ansible2,但没想到花了相当多的时间在意想不到的地方上。

这个阶段出现问题最让人烦恼。

广告
将在 10 秒后关闭
bannerAds