如何在Anaconda(Conda)环境中跟踪pip安装的软件包?
我已经安装并使用了Anaconda Python发行版,并且已经开始使用Anaconda(Conda)环境。 我可以使用标准的conda install...
命令将分发包放到我的环境中,但是在外部使用(比如Flask-WTF,flask-sqlalchemy和alembic)我需要在主动环境中使用pip install
。 但是,当我查看环境的内容时,无论是在目录中,还是使用conda list
这些pip install
ed软件包都不会显示出来。
使用pip freeze
和pip list
只列出了我安装的每个软件包。
有没有办法跟踪我的每个Anaconda环境(安装了pip
和conda
)?
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。
-
您可以将
conda list
和pip freeze
联合起来,并使用conda
软件包pipe理器使用conda
(显示在conda list
)安装的软件包以及使用pip
安装的软件包(以pip freeze
显示,但不显示conda list
)与pip
。 -
在您的环境中只安装
python
,pip
和distribute
包,并用pip
pipe理所有的东西。 (如果你在Windows上,这不是微不足道的) -
build立自己的
conda
包,并用conda
pipe理所有的东西。
我个人会推荐第三个选项,因为构buildconda
软件包非常简单。 在continuum的github账号中有一个git的例子食谱库。 但通常归结为:
conda skeleton pypi PACKAGE conda build PACKAGE
要不就:
conda pipbuild PACKAGE
另外,当你build立一次,你可以将它们上传到https://binstar.org/并从那里安装。;
那么你将使用conda
pipe理一切。
有一个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
文件中看到所有的包。