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


141

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

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

有没有办法跟踪我的每个Anaconda env(安装pipconda安装的)中的物品?


7
使用pip安装了conda,例如~/anaconda/bin/pip。使用它可以将软件包安装到conda环境中,以及查看与此pip和一起安装的软件包的联合conda install
osa 2014年

7
conda list现在已经有一段时间包括通过其他方式(例如pip,易安装,直接使用python setup.py install等)安装的python软件包
kalefranz

1
不要升级您的点数,否则此出口将变得困难
Andrew Cassidy

Answers:


120

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

64

conda将仅跟踪其安装的软件包。并pip会为您提供使用pip安装程序本身安装的软件包,或setuptoolssetup.pyconda构建中使用的软件包生成的egg信息。因此,您基本上有三个选择。

  1. 你可以采取的联合conda listpip freeze和管理使用安装的软件包conda(在这个节目conda list用)conda包管理器,并确保安装与个位pip(即秀pip freeze,但不是在conda list)与pip

  2. 仅在和环境中安装pythonpip然后使用distribute打包和管理所有内容pip。(如果您使用的是Windows,那么这并不是一件容易的事...)

  3. 构建自己的conda软件包,并使用进行管理conda

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

 conda skeleton pypi PACKAGE
 conda build PACKAGE

要不就:

conda pipbuild PACKAGE

同样,一旦构建它们,您就可以将它们上传到https://binstar.org/并从那里安装。

然后,您将使用进行所有管理conda


3
我只是试着~/anaconda/bin/pip install memory-profilerconda install numba,它们都显示在中~/anaconda/bin/pip freeze
osa

2
“连续统的github帐户上的示例食谱的git存储库”您的意思是github.com/ContinuumIO/anaconda-recipes吗?如果可以,请链接
endolith

但是,这实际上并没有安装软件包,因此您可以导入它。您必须conda install C:\...PACKAGE-0.0.0-py27_0.tar.bz2按照stackoverflow.com/a/20750388/125507中的说明执行操作
endolith 2015年

我要说的是,首先要conda install python=3.x.y在conda环境中进行安装,以便后续的pip安装通过conda安装的pip进行。
Ustaman Sangat

24

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

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


2
我想指出的是,它已经在conda 2.2.3中工作了(可能在此之前)。它的工作方式是,如果您尝试conda install package并且找不到conda配方,它会尝试通过安装它pip(然后跟踪它)。pip如果不在您的环境中,它甚至建议安装。感谢Travis所做的所有工作!
jorgeca

5
澄清,因为我几次都读错了。@Travis表示我认为,如果一个人在conda中运行,那么运行pip将首先搜索conda软件包?反向肯定不是真的-康达安装程序不查找pypi软件包,甚至不查找pypi.binstar.org上的项目。这是从conda 3.5.2开始的。
AnneTheAgile 2014年

9
这个被删除了吗?例如,如果我跑步,conda install autopep8它会告诉我“未找到软件包”,我应该手动搜索anaconda.org。
endolith 2015年

@AnneTheAgile running pip...也不起作用,它根本不会寻找conda软件包。
王俊

16

我遵循@Viktor Kerkez的回答,并取得了不同的成功。我发现有时候这个食谱

康达骨架pypi包装

康达构建包

看起来一切正常,但我无法成功导入PACKAGE。最近,我在Anaconda用户组上询问了此问题,并从@Travis Oliphant自己那里听说了使用conda构建和管理Anaconda附带的软件包的最佳方法。您可以在此处阅读此主题,但我将在下面描述该方法,以期使OP的问题的答案更加完整...

示例:我将使用conda 2.2.5在Windows上安装出色的prettyplotlib软件包

1a) conda build --build-recipe prettyplotlib

在构建的最后“测试”部分之前,您将看到构建消息看起来都不错。我看到了这个错误

文件“ C:\ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py”,第23行导入None语法错误:无法分配为None测试失败: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安装混合在一起。

对于上下文,我认为@Travis Oliphant的最新博客文章将对像我这样的人有所帮助,他们不喜欢使用健壮的Python包装的所有内容,但可以肯定当东西“起作用时”。康达似乎是前进的好方法...


2
使用conda版本3.5.2,命令$ conda build --build-recipe XXX; 错误出现'无法识别的参数:--build-recipe'。完整的答复是;用法:conda-build [-h] [-c] [--no-binstar-upload] [--output] [-s] [-t] [--no-test] [-V] [-q] RECIPE_PATH [RECIPE_PATH ...] conda-build:错误:无法识别的参数:
build


3

我认为这里缺少的是:

>pip install .

要使用setup.py安装本地软件包,它将安装一个对使用相同版本 python的所有 conda env 可见的软件包。注意我正在使用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)后,我已经创建(激活)新康达ENV,现在畅达看到它:

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

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



2

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

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

基本上,您只需要找到环境“ bin / pip”文件夹的正确路径,并将其放在install命令之前即可。


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


1

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

conda install pip

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.