繁体   English   中英

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

[英]How do I keep track of pip-installed packages in an Anaconda (Conda) environment?

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

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

有没有一种方法来跟踪什么是在我的每一个蟒蛇env S(均由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信息。 所以你基本上有三种选择。

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

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

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

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

 conda skeleton pypi PACKAGE
 conda build PACKAGE

要不就:

conda pipbuild PACKAGE

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

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

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

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

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

conda skeleton pypi PACKAGE

conda build PACKAGE

看起来一切正常但我无法成功导入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无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安装了其中一些,所以我在使用pip uninstall PACKAGE之前做了pip uninstall PACKAGE 使用conda,我现在可以使用单一方法管理(几乎)所有软件包,而不是使用conda,pip,easy_install和python setup.py install安装的东西。

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

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

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

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

>pip install .

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

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 

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

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

conda install pip

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

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

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

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

我的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文件中看到所有all-packages.yml

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM