在conda环境注册一个pip安装包

Register a pip installed package in conda environment

我正在开发一个项目,他们使用 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% 的工作,但是,当我尝试安装第二个包时,它无法识别第一个包已安装并失败。

我是新手,我一直在靠墙扔东西,但我无法以这种方式安装第一个包:

据我从您的任务中了解到,您正在使用 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

我认为问题是如何在 conda 环境中对 pip install 包使用 ansible。请注意它是 perfectly possible to use pip install within a conda environment,这在 conda 存储库中不存在所需软件包且无法使用 conda install.

安装的情况下特别有用

因此,目标是使用由 conda 创建的环境,而 而不是 virtualenv(顺便说一句,ansible 的 pip 模块为此提供了特定的参数)。

我已经通过使用 ansible's pip module 将 pip executable 指向安装在所需 conda 环境中的 pip .

参见下面的代码,注意 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环境中的包。