我已经安装并一直在使用Anaconda Python发行版,并且已经开始使用Anaconda(Conda)环境。我可以使用标准的 conda install...
命令将发行版中的软件包放入我的环境中,但要使用外部的任何内容(即 Flask-WTF、flask-sqlalchemy 和 alembic),我需要在活动环境中使用pip install
。但是,当我查看环境的内容时,无论是在目录中还是使用conda list
这些pip install
ed 包都不会显示。
使用 pip freeze
和 pip list
只会列出我安装过的每个软件包。
有没有办法跟踪我的每个 Anaconda env
(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 生成了鸡蛋信息。所以你基本上有三个选择。
-
您可以采用
conda list
的并集,pip freeze
和管理使用conda
(显示在conda list
中)与conda
包管理器安装的包,以及使用pip
安装的包(以pip freeze
显示,但不以conda list
显示)与pip
。 在您的环境中仅安装
python
、pip
和distribute
软件包,并使用pip
管理所有内容。(如果你在Windows上,这不是那么微不足道的...构建您自己的
conda
包,并使用conda
管理所有内容。
我个人推荐第三种选择,因为它很容易构建conda
包。在连续体的 github 帐户上有一个示例食谱的 git 存储库。但它通常归结为:
conda skeleton pypi PACKAGE
conda build PACKAGE
或只是:
conda pipbuild PACKAGE
此外,当您构建它们一次后,您可以将它们上传到 https://binstar.org/并从那里安装。
然后,您将使用conda
管理所有内容。
conda(new-pypi-install)有一个分支,它增加了与pip和PyPI更好的集成。 特别是 conda 列表还将显示 pip 已安装的软件包,conda install 将首先尝试查找 conda 软件包,失败后将使用 pip 安装软件包。
该分支计划在本周晚些时候合并,以便 conda 的 2.1 版将与 conda 进行更好的 pip 集成。
我遵循了Kerkez@Viktor答案,取得了喜忧参半的成功。我发现有时这个食谱
康达骨架皮皮包
康达构建包
看起来一切正常,但我无法成功导入 PACKAGE。最近我在 Anaconda 用户组上询问了这个问题,并从 Oliphant @Travis本人那里听到了使用 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 行 导入 无 语法错误: 无法分配给 无 测试失败: 漂亮剧情库-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 upload C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2
该 tar.bz2 文件是您现在需要实际安装的版本。
2) conda install C:Anacondaconda-bldwin-64prettyplotlib-0.1.3-py27_0.tar.bz2
按照这些步骤,我成功地使用 conda 安装了许多 Anaconda 不附带的软件包。以前,我使用 pip 安装了其中一些,所以我在安装 conda 的 PACKAGE 之前做了pip uninstall PACKAGE
。使用 conda,我现在可以用一种方法管理(几乎)我所有的包,而不是混合安装conda,pip,easy_install和python setup.py 安装的东西。
就上下文而言,我认为@Travis Oliphant最近的这篇博客文章将对像我这样的人有所帮助,他们不欣赏健壮的Python打包中的所有内容,但肯定欣赏东西"正常工作"的内容。 康达似乎是一个很好的前进方式...
我写Picky的原因:http://picky.readthedocs.io/
它是一个python包,可以跟踪在virtualenvs和conda envs中安装的pip或conda软件包。
我认为这里缺少的是当你这样做时:
>pip install .
要安装带有 setup.py 的本地软件包,它安装一个对所有使用 CONDA ENV 可见的包相同版本的 Python。注意我正在使用 pip 的 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 列表看到)到所有其他 conda env 相同 python 版本。
conda env export
列出了环境中的所有conda和pip包。 conda-env
必须安装在 conda 根 ( conda install -c conda conda-env
) 中。
要编写描述当前环境的environment.yml
文件,请执行以下操作:
conda env export > environment.yml
引用:
- https://github.com/conda/conda-env/
- https://github.com/conda/conda-env/issues/12
我通常在"pip"命令之前为您要安装软件包的特定环境添加前缀"bin/pip"文件夹。例如,如果您想在环境中安装 pymc3 py34,您应该使用以下命令:
~/anaconda/envs/py34/bin/pip install git+https://github.com/pymc-devs/pymc3
您基本上只需要找到环境"bin/pip"文件夹的正确路径并将其放在安装命令之前。
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
文件中的所有包。
使用环境的 pip 来安装这样的软件包
~/anaconda3/envs/<ENV_NAME_HERE>/bin/pip install <PACKAGE_NAME>
这应该有助于 conda 在使用时跟踪所有 pip 安装的软件包conda list