[英]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 freeze
和pip list
只列出我曾经安装的每个包。
有没有一种方法来跟踪什么是在我的每一个蟒蛇env
S(均由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信息。 所以你基本上有三种选择。
您可以使用conda list
的联合和pip freeze
并管理使用conda
(在conda list
中显示)使用conda
包管理器安装的软件包以及使用pip
安装的软件包(以pip freeze
显示但不在conda list
)与pip
。
在您的环境中仅安装python
, pip
和distribute
包并使用pip
管理所有内容。 (如果你在Windows上,这不是那么简单......)
构建自己的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.