【问题标题】:Ansible: install python subpackages with pipAnsible:使用 pip 安装 python 子包
【发布时间】:2018-06-03 12:52:18
【问题描述】:

我正在尝试使用 Ansible 安装气流,所以我有这个命令

- pip
  name: apache-airflow[s3, postgres]
  version: 1.9.0

但这失败并出现此错误:

pip2 安装 apache-airflow[s3==1.9.0 postgres==1.9.0 celery]==1.9.0 无效要求:'apache-airflow[s3==1.9.0' 回溯(最近一次通话最后): 文件“/usr/lib/python2.7/site-packages/pip/_internal/req/req_install.py”,第 252 行,在 from_line req = 需求(req) init 中的文件“/usr/lib/python2.7/site-packages/pip/_vendor/packaging/requirements.py”,第 97 行 要求字符串[e.loc:e.loc + 8])) InvalidRequirement:无效的需求,在“'[s3==1.9'”处解析错误

所以它认为该版本适用于每个子包,但事实并非如此。它应该尝试安装

apache-airflow[s3, postgres]==1.9.0

在 Ansible 中安装子包的正确方法是什么?

【问题讨论】:

    标签: pip ansible


    【解决方案1】:

    根据这个 github issue,你应该使用这个语法:

      - name: install with pip
        pip:
          name: 
            - 'apache-airflow[s3,postgres]'
          version: 1.9.0
    

    请注意[s3,postgres] 中的空格字符已被删除。

    更新:当有空格字符时,我会得到与 OP 问题相同的行为,这就是我建议删除它的原因(因为 github 问题也有):

    错误当有空格字符时,[s3, postgres]

    [root@greenhat-28 php_basedir]# cat testtt.yml 
    ---
    - hosts: localhost
      connection: local
      gather_facts: false
      vars:
    
      tasks:
    
      - name: install with pip
        pip:
          name: 
            - 'apache-airflow[s3, postgres]'
          version: 1.9.0
    [root@greenhat-28 php_basedir]# ansible-playbook testtt.yml 
     [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
    
    
    PLAY [localhost] ****************************************************************************************************************************************************************************************************
    
    TASK [install with pip] *********************************************************************************************************************************************************************************************
    fatal: [localhost]: FAILED! => {"changed": false, "cmd": "/usr/bin/pip2 install apache-airflow[s3, postgres]==1.9.0", "msg": "\n:stderr: WARNING: Running pip install with root privileges is generally not a good idea. Try `pip2 install --user` instead.\nInvalid requirement: 'apache-airflow[s3,'\nTraceback (most recent call last):\n  File \"/usr/lib/python2.7/site-packages/pip/req/req_install.py\", line 82, in __init__\n    req = Requirement(req)\n  File \"/usr/lib/python2.7/site-packages/pip/_vendor/packaging/requirements.py\", line 96, in __init__\n    requirement_string[e.loc:e.loc + 8]))\nInvalidRequirement: Invalid requirement, parse error at \"'[s3,'\"\n\n"}
            to retry, use: --limit @/php_basedir/testtt.retry
    
    PLAY RECAP **********************************************************************************************************************************************************************************************************
    localhost                  : ok=0    changed=0    unreachable=0    failed=1   
    
    [root@greenhat-28 php_basedir]# 
    

    【讨论】:

    • 空格无关紧要,无论有无空格,包标识符都保持有效。
    • 你试过了吗?我做了并注意到了这个问题。我用有空格字符时得到的错误更新了答案。谢谢
    • 嗯,我猜它现在在空格上拆分,不知道。很好,这值得一票!
    猜你喜欢
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2012-01-24
    • 2013-11-07
    • 2019-01-20
    相关资源
    最近更新 更多