首页 文章

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

提问于
浏览
115

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

使用 pip freezepip list 只列出我安装的每个包 .

有没有办法跟踪我的每个Anaconda env (安装了 pipconda )的内容?

9 回答

  • 64

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

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

  • 2

    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
    
  • 2

    conda 只会跟踪它安装的软件包 . 并且 pip 将为您提供使用 pip 安装程序本身安装的软件包,或者他们在 setup.py 中使用 setuptools ,因此conda构建生成了egg信息 . 所以你基本上有三种选择 .

    • 您可以获取 conda listpip freeze 的并集,并使用_15973000_(在 conda list 中显示)使用 conda 软件包管理器安装的软件包以及使用 pip (在 pip freeze 中显示但在 conda list 中未显示)中安装的软件包 pip .

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

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

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

    conda skeleton pypi PACKAGE
     conda build PACKAGE
    

    要不就:

    conda pipbuild PACKAGE
    

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

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

  • 9

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

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

  • 23

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

    conda skeleton pypi PACKAGE conda build PACKAGE

    看起来一切正常但我无法成功导入PACKAGE . 最近我在_1597318上询问了这个问题,并从@Travis Oliphant本人那里了解了使用conda来构建和管理Anaconda不附带的软件包的最佳方法 . 你可以阅读这个帖子here,但我'll describe the approach below to hopefully make the answers to the OP'的问题更完整......

    示例:我将使用conda 2.2.5在Windows上安装优秀的prettyplotlib package .

    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 upload 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,我现在可以使用单一方法管理(几乎)所有软件包,而不是使用conda,pip,easy_install和python setup.py install安装的东西 .

    对于上下文,我认为@Travis Oliphant的这个recent blog post将对像我这样的人有所帮助,他们不会欣赏强大的Python包装中的所有东西,但肯定会喜欢什么东西"just works" . 康达似乎是一个很好的前进方式......

  • 16

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

    >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 .

  • 0

    conda env export 列出环境中的所有conda和pip包 . conda-env 必须安装在conda根目录( conda install -c conda conda-env )中 .

    要编写描述当前环境的 environment.yml 文件:

    conda env export > environment.yml
    

    参考文献:

  • 98

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

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

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

  • 3

    我的 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 文件中的所有包 .

相关问题