152

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

使用pip freezepip list仅列出我曾经安装的每个软件包。

有没有办法跟踪我的每个 Anaconda 中env的内容(包括pipconda已安装的)?

4

11 回答 11

131

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
于 2015-11-13T14:21:44.390 回答
65

conda只会跟踪它安装的软件包。并将pip为您提供使用pip安装程序本身安装的软件包,或者它们setuptoolssetup.pyconda 构建中使用的软件包生成了 egg 信息。所以你基本上有三个选择。

  1. 您可以将conda listpip freeze并管理使用conda(显示在 中conda list)与conda软件包管理器一起安装的软件包,以及使用pip(显示在pip freeze但不显示在中conda list)与安装的软件包pip

  2. 仅在您的环境中安装python,pipdistribute软件包并使用pip. (如果你在 Windows 上,这不是那么简单......)

  3. 构建您自己的conda包,并使用conda.

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

 conda skeleton pypi PACKAGE
 conda build PACKAGE

要不就:

conda pipbuild PACKAGE

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

然后,您将使用conda.

于 2013-09-05T15:40:16.237 回答
24

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

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

于 2013-11-05T21:19:33.923 回答
16

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

conda 骨架 pypi 包

conda 构建包

看起来一切正常,但我无法成功导入 PACKAGE。最近我在Anaconda 用户组上询问了这个问题,并从 @Travis Oliphant 本人那里听到了使用 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 行 import None SyntaxError: cannot assign to None TESTS FAILED: prettyplotlib-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 上传 C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

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

2) conda install C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

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

就上下文而言,我认为@Travis Oliphant最近的这篇博客文章对于像我这样不欣赏强大的 Python 包装中的所有内容但肯定会欣赏“正常工作”的人会有所帮助。conda 似乎是一个很好的前进方向......

于 2013-12-23T20:04:21.563 回答
11

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

它是一个 python 包,用于跟踪在 virtualenvs 和 conda envs 中使用 pip 或 conda 安装的包。

于 2016-04-28T15:58:25.800 回答
3

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

>pip install .

要使用 setup.py 安装本地包,它会安装一个对使用相同版本python的所有conda 环境可见的包。注意我使用的是 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 中安装本地包使得该包可用于相同 python 版本的所有其他 conda env(但不能通过 conda 列表看到)。

于 2017-06-21T19:14:48.157 回答
2

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

编写environment.yml描述当前环境的文件:

conda env export > environment.yml

参考:

于 2015-05-11T08:26:01.987 回答
2

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

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

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

于 2015-07-20T17:57:50.043 回答
2

您可以首先在 conda 环境中安装以下给定命令:

conda install pip

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

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

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

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

于 2019-05-03T20:50:00.947 回答
1

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文件中的所有包。

于 2017-04-25T02:56:15.653 回答
0

使用你环境的 pip 来安装包,像这样

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

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

于 2021-07-03T10:34:38.587 回答