Como acompanhar os pacotes instalados pelo pip em um ambiente Anaconda (Conda)?


141

Instalei e uso a distribuição Anaconda Python e comecei a usar o ambiente Anaconda (Conda). Posso usar o conda install...comando padrão para colocar pacotes da distribuição em meus ambientes, mas para usar qualquer coisa externa (ex .: Flask-WTF, flask-sqlalchemy e alembic) que preciso usar pip installno ambiente ativo. No entanto, quando olho o conteúdo do ambiente, no diretório ou no uso conda listdesses pip installpacotes de edição não aparece.

Usando pip freezee pip listapenas lista todos os pacotes que já instalei.

Existe uma maneira de acompanhar o que está em cada um dos meus Anaconda envs (ambos pipe condainstalados)?


7
Use pipinstalado com conda, por exemplo ~/anaconda/bin/pip. Use-o para instalar pacotes em um condaambiente, bem como para ver a união de pacotes instalados com isso pipe com conda install.
osa

7
conda listtem por um tempo agora incluído pacotes Python que foram instalados por outros meios (por exemplo, pip, fácil de instalar, diretamente com python setup.py install, etc etc)
kalefranz

1
Não atualize seu pip, ou essa exportação será processada #
Andrew Cassidy

Respostas:


120

O conda-env agora faz isso automaticamente (se o pip foi instalado com o conda).

Você pode ver como isso funciona usando a ferramenta de exportação usada para migrar um ambiente:

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

O arquivo listará os pacotes conda e pip:

name: stats
channels:
  - javascript
dependencies:
  - python=3.4
  - bokeh=0.9.2
  - numpy=1.9.*
  - nodejs=0.10.*
  - flask
  - pip:
    - Flask-Testing

Se você deseja continuar exportando o ambiente, vá environment.ymlpara a nova máquina host e execute:

conda env create -f path/to/environment.yml

64

condaapenas acompanhará os pacotes instalados. E pipfornecerá os pacotes que foram instalados usando o pippróprio instalador ou que eles usaram setuptoolsem sua setup.pycompilação então o conda gerou as informações do ovo. Então você tem basicamente três opções.

  1. Você pode tomar a união do conda liste pip freezee gerenciar pacotes que foram instalados utilizando conda(que mostra no conda list) com o condagerenciador de pacotes e os que são instalados com pip(que show em pip freeze, mas não em conda list) com pip.

  2. Instalar apenas no seu ambiente python, pipe distributepacotes e gerenciar tudo com pip. (Isso não é tão trivial se você estiver no Windows ...)

  3. Crie seus próprios condapacotes e gerencie tudo com conda.

Eu recomendaria pessoalmente a terceira opção, pois é muito fácil criar condapacotes. Há um repositório git de receitas de exemplo na conta github do continuum. Mas geralmente se resume a:

 conda skeleton pypi PACKAGE
 conda build PACKAGE

ou apenas:

conda pipbuild PACKAGE

Além disso, quando você os tiver criado uma vez, poderá enviá-los para https://binstar.org/ e apenas instalar a partir daí.

Então você terá tudo gerenciado usando conda.


3
Eu apenas tentei ~/anaconda/bin/pip install memory-profilere conda install numba, e ambos são mostrados em ~/anaconda/bin/pip freeze.
osa

2
"repositório git de receitas de exemplo na conta do github do continuum" Você quer dizer github.com/ContinuumIO/anaconda-recipes ? Por favor, vincule se puder
endolith

Na verdade, isso não instala o pacote para que você possa importá-lo. Você deve fazer conda install C:\...PACKAGE-0.0.0-py27_0.tar.bz2o descrito em stackoverflow.com/a/20750388/125507
endolith

Eu diria que primeiro sempre há conda install python=3.x.yno seu ambiente conda, de forma que as instalações subsequentes do pip passam pelo pip instalado do conda.
Ustaman Sangat 6/09/19

24

Há um ramo da conda (new-pypi-install) que adiciona melhor integração com o pip e o PyPI. Em particular, a lista conda também mostrará os pacotes instalados pelo pip e a instalação do conda tentará primeiro encontrar um pacote conda e a falha que usará o pip para instalar o pacote.

Esse ramo está programado para ser mesclado ainda esta semana, para que a versão 2.1 do conda tenha uma melhor integração de pip com o conda.


2
Eu gostaria de salientar que isso já está funcionando no conda 2.2.3 (e provavelmente antes disso). A maneira como funciona é que, se você tentar conda install packagee não encontrar uma receita conda, ele tentará instalá-la via pip(e depois acompanhará). Sugere até a instalação, pipse não no seu ambiente. Obrigado Travis por todo o seu trabalho!
Jorgeca

5
Esclarecimento, já que eu li isso várias vezes. @ Travis significa que eu acho que se alguém estiver rodando dentro de um conda, então executar o pip procurará primeiro os pacotes conda? O inverso definitivamente não é verdadeiro - a instalação do conda não procura pacotes pypi, nem mesmo itens no pypi.binstar.org. Isto é a partir da condição 3.5.2.
AnneTheAgile

9
Isso foi removido? Se eu executar, digamos, conda install autopep8ele diz "Nenhum pacote encontrado" e que eu deveria procurar no anaconda.org manualmente.
endolith

O @AnneTheAgile running pip...também não funciona, ele não procurará o pacote conda.
Wang

16

Segui a resposta de @Viktor Kerkez e tive sucesso misto. Eu descobri que algumas vezes essa receita de

esqueleto conda pypi PACOTE

CONDA build PACOTE

parece que tudo funcionou, mas não foi possível importar o PACKAGE com êxito. Recentemente, perguntei sobre isso no grupo de usuários do Anaconda e ouvi do próprio @Travis Oliphant a melhor maneira de usar o conda para criar e gerenciar pacotes que não são fornecidos com o Anaconda. Você pode ler este tópico aqui , mas descreverei a abordagem abaixo para, esperançosamente, tornar as respostas à pergunta do OP mais completas ...

Exemplo: instalarei o excelente pacote prettyplotlib no Windows usando o conda 2.2.5.

1a) conda build --build-recipe prettyplotlib

Você verá todas as mensagens de compilação até a seção TESTE final da compilação. Eu vi esse erro

Arquivo "C: \ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py", linha 23 importação Nenhum SyntaxError: não é possível atribuir a Nenhum TESTES FAILED: prettyplotlib-0.1.3-py27_0

1b) Acesse / conda-recipes / prettyplotlib e edite o arquivo meta.yaml. Atualmente, os pacotes configurados como na etapa 1a resultam em arquivos yaml que apresentam um erro na testseção. Por exemplo, aqui está como o meu procuravaprettyplotlib

test:   # Python imports   imports:
    - 
    - prettyplotlib
    - prettyplotlib

Edite esta seção para remover a linha em branco precedida pelo - e também remova a linha prettyplotlib redundante. No momento em que escrevi este artigo, descobri que precisava editar a maioria dos arquivos meta.yaml como este para pacotes externos que estou instalando com o conda, o que significa que há uma linha de importação em branco causando o erro e uma importação redundante do pacote fornecido .

1c) Execute novamente o comando 1a, que deve ser concluído sem erros desta vez. No final da compilação, você será perguntado se deseja fazer o upload da compilação no binstar . Digitei No e depois vi esta mensagem:

Se você deseja fazer upload deste pacote para o binstar.org posteriormente, digite:

$ binstar carrega C: \ Anaconda \ conda-bld \ win-64 \ prettyplotlib-0.1.3-py27_0.tar.bz2

Esse arquivo tar.bz2 é a compilação que você precisa instalar agora.

2) conda install C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

Seguindo essas etapas, usei com êxito o conda para instalar vários pacotes que não acompanham o Anaconda. Anteriormente, eu havia instalado alguns deles usando o pip, assim como pip uninstall PACKAGEantes de instalar o PACKAGE com conda. Usando conda, agora posso gerenciar (quase) todos os meus pacotes com uma única abordagem, em vez de ter uma mistura de coisas instaladas com a instalação conda, pip, easy_install e python setup.py.

Por contexto, acho que este post recente do @Travis Oliphant será útil para pessoas como eu que não apreciam tudo o que existe em embalagens robustas em Python, mas certamente apreciam quando as coisas "simplesmente funcionam". conda parece ser um ótimo caminho a seguir ...


2
Usando o conda versão 3.5.2, o comando $ conda build --build-recipes XXX; Erros com 'argumentos não reconhecidos: --build-recipes'. Resposta completa é; uso: conda-build [-h] [-c] [--no-binstar-upload] [--output] [-s] [-t] [--no-test] [-V] [-q] RECIPE_PATH [RECIPE_PATH ...] conda-build: error: argumentos não reconhecidos: --build-recipes
AnneTheAgile 19/14


3

Eu acho que o que falta aqui é que quando você faz:

>pip install .

para instalar um pacote local com um setup.py, ele instala um pacote que é visível para todos os envs do condda que usam a mesma versão do python. Note que estou usando a versão conda do pip!

por exemplo, se estou usando python2.7, coloca o pacote local aqui:

/usr/local/anaconda/lib/python2.7/site-packages

Se, posteriormente, criar um novo ambiente conda com python = 2.7 (= o padrão):

>conda create --name new

>source activate new

E então faça:

(new)>conda list    // empty - conda is not aware of any packages yet

No entanto, se eu fizer:

(new)>pip list      // the local package installed above is present

Portanto, neste caso, o conda não conhece o pacote pip, mas o pacote está disponível para python.

No entanto, se eu instalar o pacote local (novamente usando pip) depois de criar (e ativar) o novo conda env, agora o conda o vê:

(new)>conda list   // sees that the package is there and was installed by pip

Então, acho que a interação entre conda e pip tem alguns problemas - ou seja, o uso do pip para instalar um pacote local a partir de um ambiente conda torna esse pacote disponível (mas não visto na lista conda) para todos os outros ambientes da mesma versão python.



2

Normalmente prefixo a pasta 'bin / pip' para o ambiente específico em que você deseja instalar o pacote antes do comando 'pip'. Por exemplo, se você deseja instalar o pymc3 no ambiente py34, use este comando:

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

Basicamente, você só precisa encontrar o caminho certo para a pasta 'bin / pip' do seu ambiente e colocá-lo antes do comando de instalação.


1

My which pipmostra o seguinte caminho:

$ which pip
/home/kmario23/anaconda3/bin/pip

Portanto, qualquer pacote que eu instale usando pip install <package-name>terá que ser refletido na lista de pacotes quando a lista for exportada usando:

$ conda list --export > conda_list.txt

Mas eu não. Então, em vez disso, usei o seguinte comando, conforme sugerido por vários outros:

# 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'

Agora, posso ver todos os pacotes no meu all-packages.ymlarquivo.


1

Você pode começar instalando o comando abaixo fornecido no ambiente conda:

conda install pip

Seguido pela instalação de todos os pacotes de pip necessários no ambiente.

Após instalar todos os pacotes conda e pip para exportar o ambiente, use:

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

Isso criará o arquivo necessário na pasta

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.