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

时间:2013-09-05 15:25:42

标签: python pip anaconda env conda

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

使用pip listenv只列出我安装过的所有软件包。

有没有办法跟踪我的每个Anaconda pip(安装了conda和{{1}})的内容?

11 个答案:

答案 0 :(得分:103)

conda-env现在自动执行此操作(如果使用conda安装了pip)。

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

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

答案 1 :(得分:64)

conda只会跟踪它安装的软件包。 pip将为您提供使用pip安装程序本身安装的软件包,或者在setuptools中使用setup.py的软件包,以便生成egg信息。所以你基本上有三种选择。

  1. 您可以使用conda listpip freeze的联合,并使用condaconda list中显示的)管理使用conda安装的软件包{1}}软件包管理器以及pip安装的软件包管理器(pip freeze但不在conda list中)pip

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

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

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

     conda skeleton pypi PACKAGE
     conda build PACKAGE
    

    或只是:

    conda pipbuild PACKAGE
    

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

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

答案 2 :(得分:23)

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

这个分支计划在本周晚些时候合并,因此conda的2.1版将与conda进行更好的pip整合。

答案 3 :(得分:16)

我跟着@Viktor Kerkez的回答并取得了不同程度的成功。我发现有时这个配方

  

conda skeleton pypi PACKAGE

     

conda build PACKAGE

看起来一切正常但我无法成功导入PACKAGE。最近我在Anaconda user group上询问了这个问题,并从@Travis Oliphant本人那里了解了使用conda构建和管理Anaconda不附带的软件包的最佳方法。你可以阅读这个帖子here,但我将描述下面的方法,希望能够更完整地回答OP的问题......

示例:我将使用conda 2.2.5在Windows上安装优秀的prettyplotlib package

1a) conda build --build-recipe prettyplotlib

在构建的最终TEST部分之前,您将看到构建消息看起来都很好。我看到了这个错误

  

文件“C:\ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py”,第23行       import None SyntaxError:无法分配给无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行。在撰写本文时,我发现我需要编辑这样的大多数meta.yaml文件,用于我用conda安装的外部包,这意味着有一个空白的导入行导致错误以及给定包的冗余导入

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

  

如果您想稍后将此软件包上传到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安装了其中的一些,所以在使用conda安装PACKAGE之前我做了pip uninstall PACKAGE。使用conda,我现在可以使用单一方法管理(几乎)所有软件包,而不是使用conda,pip,easy_install和python setup.py install安装的东西。

对于上下文,我认为@Travis Oliphant的这个recent blog post将对像我这样的人有所帮助,他们不会欣赏强大的Python包装中的所有东西,但当“东西正常”时肯定会欣赏。康达似乎是一个很好的前进方式......

答案 4 :(得分:9)

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

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

答案 5 :(得分:3)

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

>pip install .

使用setup.py安装本地软件包, 它会安装一个对所有使用的conda env可见的包 与python相同的版本。注意我使用的是conda版本的pip!

例如,如果我使用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。

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

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

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

答案 6 :(得分:2)

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

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

conda env export > environment.yml

参考文献:

答案 7 :(得分:2)

我通常在&#39; bin / pip&#39;前加上前缀。要在“点”之前安装包的特定环境的文件夹命令。例如,如果要在环境py34中安装pymc3,则应使用以下命令:

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

您基本上只需找到适合您环境的正确途径&#39; bin / pip&#39;文件夹并将其放在安装命令之前。

答案 8 :(得分:1)

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

conda install pip

接着安装环境中所需的所有pip软件包。

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

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

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

使用您环境的 pip 安装软件包

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

当您使用 conda list

时,这应该有助于 conda 跟踪所有已安装的 pip 包