如何在 Anaconda (Conda) 环境中跟踪 pip 安装的软件包



我已经安装并一直在使用Anaconda Python发行版,并且已经开始使用Anaconda(Conda)环境。我可以使用标准的 conda install... 命令将发行版中的软件包放入我的环境中,但要使用外部的任何内容(即 Flask-WTF、flask-sqlalchemy 和 alembic),我需要在活动环境中使用pip install。但是,当我查看环境的内容时,无论是在目录中还是使用conda list这些pip install ed 包都不会显示。

使用 pip freezepip list 只会列出我安装过的每个软件包。

有没有办法跟踪我的每个 Anaconda envpipconda安装)中的内容?

conda-env 现在会自动执行此操作(如果 pip 与 conda 一起安装)。

通过使用用于迁移环境的导出工具,您可以了解其工作原理:

conda env export -n <env-name> > environment.yml

该文件将列出 conda 包和 pip 包:

name: stats
channels:
  - javascript
dependencies:
  - python=3.4
  - bokeh=0.9.2
  - numpy=1.9.*
  - nodejs=0.10.*
  - flask
  - pip:
    - Flask-Testing

如果要继续导出环境,请将environment.yml移动到新的主机并运行:

conda env create -f path/to/environment.yml

conda只会跟踪它安装的软件包。pip将为您提供使用 pip 安装程序本身安装的软件包,或者他们在setup.py中使用了setuptools,因此 conda build 生成了鸡蛋信息。所以你基本上有三个选择。

  1. 您可以采用conda list的并集,pip freeze和管理使用conda(显示在conda list中)与conda包管理器安装的包,以及使用pip安装的包(以pip freeze显示,但不以conda list显示)与pip

  2. 在您的环境中仅安装pythonpipdistribute软件包,并使用pip管理所有内容。(如果你在Windows上,这不是那么微不足道的...

  3. 构建您自己的conda包,并使用 conda 管理所有内容。

我个人推荐第三种选择,因为它很容易构建conda包。在连续体的 github 帐户上有一个示例食谱的 git 存储库。但它通常归结为:

 conda skeleton pypi PACKAGE
 conda build PACKAGE

或只是:

conda pipbuild PACKAGE

此外,当您构建它们一次后,您可以将它们上传到 https://binstar.org/并从那里安装。

然后,您将使用conda管理所有内容。

conda(new-pypi-install)有一个分支,它增加了与pip和PyPI更好的集成。 特别是 conda 列表还将显示 pip 已安装的软件包,conda install 将首先尝试查找 conda 软件包,失败后将使用 pip 安装软件包。

该分支计划在本周晚些时候合并,以便 conda 的 2.1 版将与 conda 进行更好的 pip 集成。

我遵循了Kerkez@Viktor答案,取得了喜忧参半的成功。我发现有时这个食谱

康达骨架皮皮包

康达构建包

看起来一切正常,但我无法成功导入 PACKAGE。最近我在 Anaconda 用户组上询问了这个问题,并从 Oliphant @Travis本人那里听到了使用 conda 构建和管理未随 Anaconda 一起提供的软件包的最佳方式。您可以在此处阅读此线程,但我将在下面描述方法,希望使 OP 问题的答案更完整......

示例:我将使用 conda 2.2.5 在 Windows 上安装优秀的 prettyplotlib 软件包。

1a) conda build --build-recipe prettyplotlib

您将看到构建消息看起来都很好,直到构建的最后一个 TEST 部分。我看到了这个错误

文件"C:\Anaconda\conda-bld\test-tmp_dir\run_test.py",第 23 行 导入 无 语法错误: 无法分配给 无 测试失败: 漂亮剧情库-0.1.3-py27_0

1b) 进入/conda-recipes/prettyplotlib 并编辑 meta.yaml 文件。目前,像步骤 1a 中那样设置的包会导致 yaml 文件在test部分中出现错误。例如,这是我寻找prettyplotlib

test:   # Python imports   imports:
    - 
    - prettyplotlib
    - prettyplotlib

编辑此部分以删除前面带有 - 的空白行,并删除多余的 prettyplotlib 行。在撰写本文时,我发现我需要为使用 conda 安装的外部软件包编辑大多数这样的 meta.yaml 文件,这意味着有一个空白的导入行导致错误以及给定包的冗余导入。

1c) 从 1a 重新运行命令,这次应该完成并且没有错误。在构建结束时,系统会询问您是否要将构建上传到 binstar。我输入了"否",然后看到以下消息:

如果要将此包上载到以后 binstar.org,请键入:

$ binstar upload C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

该 tar.bz2 文件是您现在需要实际安装的版本。

2) conda install C:Anacondaconda-bldwin-64prettyplotlib-0.1.3-py27_0.tar.bz2

按照这些步骤,我成功地使用 conda 安装了许多 Anaconda 不附带的软件包。以前,我使用 pip 安装了其中一些,所以我在安装 conda 的 PACKAGE 之前做了pip uninstall PACKAGE。使用 conda,我现在可以用一种方法管理(几乎)我所有的包,而不是混合安装conda,pip,easy_install和python setup.py 安装的东西。

就上下文而言,我认为@Travis Oliphant最近的这篇博客文章将对像我这样的人有所帮助,他们不欣赏健壮的Python打包中的所有内容,但肯定欣赏东西"正常工作"的内容。 康达似乎是一个很好的前进方式...

这就是

我写Picky的原因:http://picky.readthedocs.io/

它是一个python包,可以跟踪在virtualenvs和conda envs中安装的pip或conda软件包。

我认为这里缺少的是当你这样做时:

>pip install .

要安装带有 setup.py 的本地软件包,它安装一个对所有使用 CONDA ENV 可见的包相同版本的 Python。注意我正在使用 pip 的 conda 版本!

例如,如果我使用的是python2.7,它将本地包放在这里:

/

usr/local/anaconda/lib/python2.7/site-packages

如果我稍后使用 python=2.7 创建一个新的 conda env(= 默认值):

>conda create --name new
>source activate new

然后做:

(new)>conda list    // empty - conda is not aware of any packages yet

但是,如果我这样做:

(new)>pip list      // the local package installed above is present

所以在这种情况下,conda 不知道 pip 包,但包对 python 可用。

但是,如果我在创建(并激活)新的 conda env 后安装本地包(再次使用 pip),现在 conda 会看到它:

(new)>conda list   // sees that the package is there and was installed by pip

所以我认为 conda 和 pip 之间的交互存在一些问题 - 即,使用 pip 从一个 conda env 中安装本地包会使该包可供(但无法通过 conda 列表看到)到所有其他 conda env 相同 python 版本。

conda env export列出了环境中的所有conda和pip包。 conda-env必须安装在 conda 根 ( conda install -c conda conda-env ) 中。

要编写描述当前环境的environment.yml文件,请执行以下操作:

conda env export > environment.yml

引用:

  • https://github.com/conda/conda-env/
  • https://github.com/conda/conda-env/issues/12

我通常在"pip"命令之前为您要安装软件包的特定环境添加前缀"bin/pip"文件夹。例如,如果您想在环境中安装 pymc3 py34,您应该使用以下命令:

~/anaconda/envs/py34/bin/pip install git+https://github.com/pymc-devs/pymc3 

您基本上只需要找到环境"bin/pip"文件夹的正确路径并将其放在安装命令之前。

您可以从在

conda 环境中安装以下给定命令开始:

conda install pip

然后安装环境中所需的所有 pip 包。

安装所有 conda 和 pip 包以导出环境后,请使用:

conda env export -n <env-name> > environment.yml

这将在文件夹中创建所需的文件

我的which pip显示以下路径:

$ which pip
/home/kmario23/anaconda3/bin/pip

因此,当我使用 pip install <package-name> 安装的任何软件包时,当使用以下命令导出列表时,都必须反映在软件包列表中:

$ conda list --export > conda_list.txt

但是,我没有。因此,我按照其他几个人的建议使用了以下命令:

# get environment name by
$ conda-env list
# get list of all installed packages by (conda, pip, etc.,)
$ conda-env export -n <my-environment-name> > all_packages.yml
# if you haven't created any specific env, then just use 'root'

现在,我可以看到all-packages.yml文件中的所有包。

使用环境的 pip 来安装这样的软件包

~/anaconda3/envs/<ENV_NAME_HERE>/bin/pip install <PACKAGE_NAME>

这应该有助于 conda 在使用时跟踪所有 pip 安装的软件包conda list

相关内容

  • 没有找到相关文章

最新更新