我正在开发一个项目,他们使用Ansible运行几个conda安装。我需要从github安装两个附加软件包,这些软件包具有现有conda安装已经涵盖的依赖项,第二个软件包依赖于第一个。
使用下面的Ansible代码,我可以在不重新安装依赖项的情况下安装第一个软件包。
- name: install mypackage
shell: /home/myname/envs/myproject/bin/pip install --install-option="--prefix=/home/myname/envs/myproject" --egg https://github.com/myname/mypackage/archive/my_branch.zip
这让我有95%的路程,但是,当我尝试安装第二个软件包时,它并没有认识到第一个软件包已经安装并失败。
我是新手,我一直把墙上的东西扔到墙上但是我无法以这样的方式安装第一个包:
答案 0 :(得分:2)
从我的任务中你可以理解你使用venv来安装软件包,这很好。我不明白为什么你使用shell模块来处理安装..这不好。
你可以用ansible'来处理这一切。 pip
模块:
- name: "Install mypackage"
pip:
virtualenv: /home/{{ lookup('env','USER') }}/envs/myproject/
name: "{{ item }}"
with_items:
- "https://github.com/myname/mypackage1/archive/my_branch.zip"
- "https://github.com/myname/mypackage2/archive/my_branch.zip"
这应该按照您需要的顺序正确安装软件包,而无需通过shell
输出工作。
请注意,您可以将普通的python包与鸡蛋等混合使用。
作为virtualenv
的替代方案,您可以使用executable
。
查看docs
答案 1 :(得分:0)
我认为问题是如何在pip install
环境中使用ansible到conda
软件包。注意它是perfectly possible to use pip install
within a conda environment,在所需的软件包在conda存储库中不存在并且无法与conda install
一起安装的情况下特别有用。
因此,目标是使用conda
创建的环境,而不是使用{strong>不创建virtualenv
的环境(顺便说一句,ansible的pip模块提供了特定的参数)。
通过使用ansible's pip module,并将点executable
指向所需的conda环境中安装的点,我设法做到了。
请参见下面的代码,注意executable
变量的使用:
- name: Install pip packages WITHIN a designated conda environment
pip:
name: some_package_name
executable: "/home/[username]/[anaconda3]/envs/[conda_env_name]/bin/pip"
# ^-- Of course you will need to ensure the correct path.
这将pip install
指定的conda环境中的软件包。