如何在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环境(安装了pipconda )?

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会生成egg信息。 所以你基本上有三个select。

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

  2. 在您的环境中只安装pythonpipdistribute包,并用pippipe理所有的东西。 (如果你在Windows上,这不是微不足道的)

  3. build立自己的conda包,并用condapipe理所有的东西。

我个人会推荐第三个选项,因为构buildconda软件包非常简单。 在continuum的github账号中有一个git的例子食谱库。 但通常归结为:

  conda skeleton pypi PACKAGE conda build PACKAGE 

要不就:

 conda pipbuild PACKAGE 

另外,当你build立一次,你可以将它们上传到https://binstar.org/并从那里安装。;

那么你将使用condapipe理一切。

有一个conda分支(新的pypi安装),增加了与pip和PyPI更好的整合。 特别是conda list也会显示pip已安装的软件包,而conda install会首先尝试findconda软件包,如果失败,将使用pip来安装软件包。

这个分支计划在本周晚些时候进行合并,以便conda 2.1版本可以更好地与conda进行点对点集成。

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

conda骨架pypi包装

conda生成PACKAGE

看起来像一切工作,但我无法成功导入包装。 最近,我在Anaconda用户组询问了这个问题,并从@Travis Oliphant那里听说了使用conda来构build和pipe理那些没有与Anaconda一起发布的软件包的最好方法。 你可以在这里阅读这个post,但是我会在下面描述这个方法,希望能够让OP的问题的答案更加完整。

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

1a) conda build --build-recipe prettyplotlib

你会看到构build消息都看起来不错,直到构build的最后一个testing部分。 我看到这个错误

文件“C:\ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py”,第23行导入无语法错误:无法分配给无testing失败:prettyplotlib-0.1.3-py27_0

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

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

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

1c)重新运行来自1a的命令,这次应该完成out错误。 在构build结束时,您会被问到是否要将构build上传到binstar 。 我进入了否,然后看到这个消息:

如果您想稍后将此软件包上传到binstar.org,请input:

$ 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,我现在可以用一种方法pipe理(几乎)所有的包,而不是用conda,pip,easy_install和python setup.py install来安装。

对于上下文,我认为最近由@Travis Oliphant撰写的博客文章将对像我这样的人不太感激,他们不理解所有进入健壮的Python包装的东西,但是当东西“正常工作”时肯定会感激。 康达似乎是一个伟大的前进方向…

这就是为什么我写了Picky: http : //picky.readthedocs.io/

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

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

 >pip install . 

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

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

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

如果我以后用python = 2.7(默认)创build一个新的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。

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

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

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

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

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

 conda env export > environment.yml 

参考文献:

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

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

你基本上只需要find你的环境'bin / pip'文件夹的正确path,并把它放在安装命令之前。

我的which pip显示以下path:

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

所以,无论使用pip install <package-name>都必须在使用以下命令导出列表时在软件包列表中反映出来:

 $ conda list --export > conda_list.txt 

但是,我不知道。 因此,我使用了其他几个人所build议的以下命令:

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