【问题标题】:Installing Ansible Python package on Windows在 Windows 上安装 Ansible Python 包
【发布时间】:2018-12-12 12:10:13
【问题描述】:

我正在努力在我的 Windows 10 机器上安装 Ansible Python 包。

我不需要 Ansible 在我的机器上运行,这纯粹是为了在我的 Windows 主机上进行开发。稍后将在 Linux 机器上发出所有命令。

运行后:

pip install ansible

我得到以下异常:

命令 "c:\users\evaldas.buinauskas\appdata\local\programs\python\python37-32\python.exe -u -c "import setuptools, tokenize;__file__='C:\Users\evaldas.buinauskas \AppData\Local\Temp\pip-install-hpay_le9\ansible\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\ n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\evaldas.buinauskas\AppData\Local\Temp\pip- record-dvfgngpp\install-record.txt --single-version-externally-managed --compile" 在 C:\Users\evaldas.buinauskas\AppData\Local\Temp\pip-install-hpay_le9\ansible 中出现错误代码 1 失败\

还有一个我认为是根本原因的重复异常:

错误:无法复制“lib\ansible\module_utils\ansible_release.py”:不存在或不是常规文件

This GitHub issue 说应该可以安装,而不是运行它。这基本上就是我真正需要的。

我尝试以管理员身份运行 CMD/PowerShell/Cygwin,但没有帮助。

另外,还有一个答案告诉如何在 Windows 上安装它:How to overcome - pip install ansible on windows failing with filename or extension too long on windows

但我真的不明白如何为 Ansible 包获取轮文件。

【问题讨论】:

    标签: python pip ansible


    【解决方案1】:

    在 Windows 上安装 Ansible 很麻烦。我的建议不是关于如何在 Windows 上安装 Ansible 的直接解决方案,而是一种解决方法。

    我使用带有 Ansible 的 Docker 容器在我的 Windows 机器上开发剧本。你的机器上需要Docker for Windows

    这是 Dockerfile:

    FROM alpine:3.7
    
    ENV ANSIBLE_VERSION=2.5.4
    
    ENV BUILD_PACKAGES \
            bash \
            curl \
            tar \
            nano \
            openssh-client \
            sshpass \
            git \
            python \
            py-boto \
            py-dateutil \
            py-httplib2 \
            py-jinja2 \
            py-paramiko \
            py-pip \
            py-setuptools \
            py-yaml \
            ca-certificates
    
    RUN apk --update add --virtual build-dependencies \
            gcc \
            musl-dev \
            libffi-dev \
            openssl-dev \
            python-dev && \
        set -x && \
        apk update && apk upgrade && \
        apk add --no-cache ${BUILD_PACKAGES} && \
        pip install --upgrade pip && \
        pip install python-keyczar docker-py boto3 botocore && \
        apk del build-dependencies && \
        rm -rf /var/cache/apk/* && \
        mkdir -p /etc/ansible/ /ansible && \
        echo "[local]" >> /etc/ansible/hosts && \
        echo "localhost" >> /etc/ansible/hosts && \
        curl -fsSL https://releases.ansible.com/ansible/ansible-${ANSIBLE_VERSION}.tar.gz -o ansible.tar.gz && \
        tar -xzf ansible.tar.gz -C /ansible --strip-components 1 && \
        rm -fr ansible.tar.gz /ansible/docs /ansible/examples /ansible/packaging
    
    ENV ANSIBLE_GATHERING=smart \
        ANSIBLE_HOST_KEY_CHECKING=false \
        ANSIBLE_RETRY_FILES_ENABLED=false \
        ANSIBLE_ROLES_PATH=/ansible/playbooks/roles \
        ANSIBLE_SSH_PIPELINING=True \
        PYTHONPATH=/ansible/lib \
        PATH=/ansible/bin:$PATH \
        ANSIBLE_LIBRARY=/ansible/library \
        EDITOR=nano
    
    WORKDIR /ansible/playbooks
    
    ENTRYPOINT ["ansible-playbook"]
    

    使用docker build 命令构建 docker 容器。之后,您可以创建一个小型 bash 脚本,该脚本执行 docker run 命令并将当前目录挂载到容器中。你可以叫它ansible-playbook.sh:

    winpty docker run --rm -it -v /$(pwd):/ansible/playbooks <name of your container> $@
    

    现在您将能够在GIT BASH 中使用./ansible-playbook.sh &lt;your playbook&gt; 启动Ansible playbook。如果您想在 PowerShell 中运行它,您可能需要删除 winpty 命令,但我还没有在 PS 中进行测试。

    这不是最好的解决方案,但它可以完成工作。希望对你也有帮助。

    【讨论】:

    • 是的,我还考虑过使用 Docker 并将我的当前目录挂载在那里。谢谢!
    【解决方案2】:

    我已通过以下步骤(在 powershell 中运行)设法在 Windows 10 上安装了 ansible:

    • 克隆 ansible 存储库,例如到 ansible 文件夹
    • pip3 安装 -e .\ansible\

    您可能还需要创建一个符号链接,但是,这不是必需的:

    New-Item -ItemType SymbolicLink -Name ansible_release.py -Target .\lib\ansible\release.py

    Ansible 对开发有些不可用,因为它使用了一些仅限 Unix 的模块,例如 grppwd。例如,您将无法运行单元测试(例如 module_utils/basic.py 导入 grp 和 pwd)。将 grp.py 下载到 site-packages 文件夹将无济于事。

    为了获得更流畅的体验,我建议安装 WSL(适用于 Linux 的 Windows 子系统)并使用 pip 安装 python,然后运行 ​​pip install ansibleHere's how you can use WSL for development in Visual Studio Code

    【讨论】:

    • 这也适用于 cygwin,只要你的 python 安装路径没有空格。
    【解决方案3】:

    我有类似的要求 - 将 Ansible 安装为合法的 Python 库,以便我可以引用它并在我的 Windows 开发环境中浏览源代码(而不是在 Windows 上运行 Ansible)。我通过执行以下操作使其部分安装(一些失败,但不足以停止安装):

    1. 从 github 下载最新的 zip 版本(例如https://github.com/ansible/ansible/archive/v2.9.2.zip)。注意,必须是zip版本,因为tar.gz里面有符号链接)。
    2. 解压到(例如)C:\Temp\ansible-2.9.2
    3. 通过将setup.py 更改为立即从_maintain_symlinks 返回来删除符号链接依赖项:
      def _maintain_symlinks(symlink_type, base_path):
          return
      
    4. cd C:\Temp\ansible-2.9.2
    5. c:\Python38\python.exe setup.py install

    【讨论】:

    • 之后如何使用ansible?
    • 这仅用于源浏览/索引:“(不能在 Windows 上运行 Ansible)”。 Intellij(例如)会将其索引为 python 库,因此您可以跳转到定义等。
    【解决方案4】:

    另一种方法是从商店安装 Ubuntu 18.04。甚至在可用时更新。然后在 Linux 环境中执行有关 Ansible 的所有更改。

    当然,如果您需要使用 Ansible 作为控制器,这将迫使您做一些技巧。

    【讨论】:

      【解决方案5】:

      感谢@Kevin C 的提示,现在就试试...

      正如您所写,“Windows 下的 pip”解决方案正在运行但是 ...在某种程度上无用,因为 ansible 确实需要在 linux 环境中执行完全按设计工作。 尝试通过 MS Store 安装 python 3.8,例如然后 pip 从here 安装克隆的 ansible git repo

      正如您所建议的,使用适用于 Linux 的 Windows 子系统 (WSL) 即可。

      看下面我的

      • 总结和
      • 演练

      总结

      可以在 Win10 + Windows Subsystem for linux 上安装 ansible,而不是在 docker 容器中,你必须自己决定它是否更适合你的目的。设置时间也非常合理,例如集成到 Visual Studio 代码中可以在本地测试 ansible 开发(例如 ansible-lint 或 ansible-playbook --syntax-check)。此外,其他命令,如 ansible-galaxy 和 ansible-inventory 命令按预期工作,基本测试已完成......

      演练

      您可能需要确保您运行的是最新的 Windows 10 版本;在撰写本文时,我使用的是 Windows 10 专业版,版本 2004。WSL2 可用于此 Windows 版本。

      WSL2 安装

      通过管理员 powershell as per MS instructions:

      dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

      dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

      wsl --set-default-version 2

      如果最后一条命令告诉您,您可能仍需要更新 wsl 内核映像,因此如果您看到此消息,请关注 wsl2kernel update guide that is shown there

      WSL 2 需要更新其内核组件。详情请访问https://aka.ms/wsl2kernel

      ...安装之后,上面的信息应该不会再显示了。

      在撰写本文时安装任何 linux“发行版”from the Microsoft store directly via powershell is not possible

      [编辑] @2021-02:以前,https://aka.ms/wslstore 工作......现在没有了。但是您现在仍然可以使用商店和搜索或按照说明进行手动安装,例如:

      Invoke-WebRequest -Uri https://aka.ms/wsl-debian-gnulinux -OutFile Debian.appx -UseBasicParsing

      添加-AppxPackage .\Debian.appx

      ...作为微软文档here

      最后:安装 ansible

      因此,在可能需要 5 分钟(下载时间可能大不相同)的初始配置之后,您已经有了 Windows 下的 Linux shell。 与所有常用的 Ubuntu 或 Debian 一样,现在您可以使用

      轻松安装 ansible

      sudo apt install ansible

      应该安装最新版本的 ansible(ansible 版本是 2.9.12 @2020-08)。

      应该就是这个了。

      如果您还想使用 Visual Studio Code,也可以选择:

      Visual Studio 代码配置

      要将此设置与 VS Code 一起使用,请下载 here 并安装(...在 Windows 10 中,而不是在 Debian / WSL 中)(...您也可以使用 Chocolatey 进行该安装,但 VS 代码通常会自行更新尽可能默认)。

      根据最初链接的文章VS code & WSL“配置 VS Code 以使用 Bash”

      有2个改进:

      • 现在的设置(Win 10 2004,64 位,日期 2020-08)位于:

      文件 -> 首选项 -> 设置 或通过按键直接访问 [CTRL] + [,]

      • 启动 bash 的完整路径也发生了一些变化:

      "terminal.integrated.shell.windows": "C:\Windows\System32\bash.exe"

      不过,您必须按照原始的 VS code & WSL 文章熟悉 WSL 中的安装位置 - 您需要找到您的 ansible 项目位置才能继续...

      您可能还想安装那里提到的 git。此外,VS 代码扩展 that the ansible project recommends 可能会派上用场。有关基本“ansible”扩展的功能介绍,请参阅here

      快乐的 ansible 编码和测试(使用 VS Code)!

      【讨论】:

      • 诚然,这个解决方案在重新阅读和改进后实际上并没有使用 python / pip 来让你在 Windows(终端 / VS 代码)中使用可工作的 ansible。所以,可能被认为是一个错误的答案,因为它只填充了“windows下的ansible”,而不是“通过python/pip在windows下的ansible”——docker解决方案也使用了“side tracked answer”。该解决方案基本上将基于容器中的 git 存储库的虚拟环境组合在一起,然后使用。然而,基于“纯 python + pip”的解决方案似乎不足以在 Windows 下“本地”使用 ansible。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 2016-09-27
      相关资源
      最近更新 更多