python - 运行虚拟环境 Ansible

标签 python ansible virtual-environment

我正在尝试在 Ansible 中运行虚拟环境。

不断出错。

代码如下:

- name: Install virtualenv
  pip: name=virtualenv
  when: virtualenvexists.stat.exists != true

- name: Create virtualenv
  sudo: true
  command: virtualenv /home/vagrant/db/venv

- name: Activate
  sudo: yes
  sudo_user: vagrant
  command: /home/vagrant/db/venv/bin/source /home/vagrant/db/venv/bin/activate

我收到错误信息:

{"cmd": "/home/vagrant/db/venv/bin/activate", "failed": true, "rc": 13} 消息:[Errno 13] 权限被拒绝

我试过以多个用户的身份运行这个命令,我也在尝试弄清楚如何在不激活虚拟实例的情况下自动运行命令,但我没有运气。

如何在 Ansible 的虚拟环境中运行命令?

我也试过这个,但没有成功:

- name: ansible_python_interpreter
  set_fact:
    ansible_python_interpreter: /home/vagrant/db/venv/bin/python

最佳答案

这里有很多问题。首先是您以 root 身份创建虚拟环境:

- name: Create virtualenv
  sudo: true
  command: virtualenv /home/vagrant/db/venv

但您正试图以 vagrant 用户身份访问它:

- name: Activate
  sudo: yes
  sudo_user: vagrant
  command: /home/vagrant/db/venv/bin/source /home/vagrant/db/venv/bin/activate

您可能希望在这两个任务上都使用 sudo_user: vagrant

其次,source 命令是一个 shell 内置命令,您不会在 /home/vagrant/db/venv/bin/source 中找到它。所以这个命令根本没有意义。

最后,即使它确实有意义,也没有实际效果:那会修改command模块的环境,但不会影响后续任务。有几种方法可以解决这个问题;如果您只是想运行已安装在虚拟环境中的命令,则可以直接运行:

command: /home/vagrant/db/venv/bin/somecommand

这将正确使用您的虚拟环境中安装的 Python 版本。或者,您可以将所有内容嵌入到 shell 脚本中:

shell:
  cmd: |
    source /home/vagrant/db/venv/bin/activate
    do_stuff_here

更新

对于那些“它不起作用!”的人评论者,我向你展示......一个running example !

关于python - 运行虚拟环境 Ansible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33267649/

相关文章:

python - python 中的轴选项

sorting - 如何在 Ansible 中对复杂的版本号进行排序

python - NEAT-Python 找不到 Visualize.py

conda - 解决PackageNotFound : Create env using conda and yml file on MacOS

python - 在 Jupyter Notebook 中使用 Python 虚拟环境

python - 在 theading.Thread 中使用 sqlalchemy scoped_session

python - QTreeView 与 QFileSystemModel 无法正常工作

python - 优化用于更改列表的最小函数

python - Ansible ec2.py 不工作

linux - 是否有一些相当于 "failed_when"的 Ansible 成功