在conda环境中注册pip安装包

时间:2016-04-22 19:50:18

标签: python pip virtualenv ansible conda

我正在开发一个项目,他们使用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%的路程,但是,当我尝试安装第二个软件包时,它并没有认识到第一个软件包已经安装并失败。

我是新手,我一直把墙上的东西扔到墙上但是我无法以这样的方式安装第一个包:

  • 识别现有的conda安装
  • 第二个包标识第一个

2 个答案:

答案 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环境中的软件包。