Come posso tenere traccia dei pacchetti installati su pip in un ambiente Anaconda (Conda)?


141

Ho installato e ho utilizzato la distribuzione Anaconda Python e ho iniziato a utilizzare l'ambiente Anaconda (Conda). Posso usare il conda install...comando standard per inserire pacchetti dalla distribuzione nei miei ambienti, ma per usare qualsiasi cosa all'esterno (es. Flask-WTF, flask-sqlalchemy e alambicco) che devo usare pip installnell'ambiente attivo. Tuttavia, quando guardo il contenuto dell'ambiente, nella directory o usando conda listquesti pip installpacchetti ed non appare.

Utilizzando pip freezee pip listsolo elenca tutti i pacchetti che abbia mai installato.

C'è un modo per tenere traccia di ciò che è in ciascuna della mia Anaconda env (entrambi pipe condainstallati)?


7
Utilizzare pipinstallato con conda, ad es ~/anaconda/bin/pip. Usalo per installare i pacchetti in un condaambiente, nonché per vedere l'unione dei pacchetti installati con questo pipe con conda install.
osa,

7
conda listda qualche tempo include pacchetti python che sono stati installati con altri mezzi (ad es. pip, installazione semplice, direttamente con python setup.py install, ecc. ecc.)
kalefranz,

1
Non aggiornare il tuo pip o questa esportazione verrà trattenuta
Andrew Cassidy,

Risposte:


120

conda-env ora lo fa automaticamente (se pip è stato installato con conda).

Puoi vedere come funziona utilizzando lo strumento di esportazione utilizzato per la migrazione di un ambiente:

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

Il file elencherà sia i pacchetti conda che i pacchetti pip:

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

Se stai cercando di completare l'esportazione dell'ambiente, passa environment.ymlal nuovo computer host ed esegui:

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

64

condamanterrà traccia dei pacchetti installati. E pipti darà i pacchetti che sono stati installati utilizzando il programma di pipinstallazione stesso o che hanno usato setuptoolsnella loro setup.pybuild così conda ha generato le informazioni sull'uovo. Quindi hai sostanzialmente tre opzioni.

  1. Si può prendere l'unione del conda liste pip freezee gestire i pacchetti che sono stati installati utilizzando conda(che mostrano in conda list) con il condagestore di pacchetti e quelli che vengono installati con pip(che spettacolo in pip freezema non in conda list) con pip.

  2. Installare solo nel proprio ambiente python, pipe distributepacchetti e gestire il tutto con pip. (Questo non è così banale se sei su Windows ...)

  3. Crea i tuoi condapacchetti e gestisci tutto con conda.

Raccomanderei personalmente la terza opzione poiché è molto facile creare condapacchetti. C'è un repository git di ricette di esempio sull'account github del continuum. Ma di solito si riduce a:

 conda skeleton pypi PACKAGE
 conda build PACKAGE

o semplicemente:

conda pipbuild PACKAGE

Inoltre, quando li hai creati una volta, puoi caricarli su https://binstar.org/ e installarli da lì.

Quindi avrai tutto gestito usando conda.


3
Ho appena provato a ~/anaconda/bin/pip install memory-profilere conda install numba, e sono entrambi mostrati in ~/anaconda/bin/pip freeze.
osa,

2
"repository git di ricette di esempio sull'account github del continuum" Intendi github.com/ContinuumIO/anaconda-recipes ? Si prega di collegare se è possibile
endolith

Questo in realtà non installa il pacchetto in modo da poterlo importare, comunque. Devi fare conda install C:\...PACKAGE-0.0.0-py27_0.tar.bz2come descritto in stackoverflow.com/a/20750388/125507
endolith

Direi che hai sempre conda install python=3.x.ynel tuo ambiente conda in modo tale che le successive installazioni di pip passino attraverso conda installato pip.
Ustaman Sangat,

24

Esiste un ramo di conda (new-pypi-install) che aggiunge una migliore integrazione con pip e PyPI. In particolare l'elenco conda mostrerà anche i pacchetti installati da pip e l'installazione conda proverà innanzitutto a trovare un pacchetto conda e, in caso contrario, utilizzerà pip per installare il pacchetto.

Questo ramo dovrebbe essere unito alla fine di questa settimana in modo che la versione 2.1 di conda abbia una migliore integrazione pip con conda.


2
Vorrei sottolineare che questo sta già funzionando in conda 2.2.3 (e probabilmente prima). Il modo in cui funziona è che se provi conda install packagee non riesce a trovare una ricetta conda, prova a installarlo tramite pip(e quindi ne tiene traccia). Suggerisce anche di installare pipse non nel tuo ambiente. Grazie Travis per tutto il tuo lavoro!
Jorgeca,

5
Chiarimento, poiché l'ho letto male varie volte. @Travis significa che penso che se uno è in esecuzione all'interno di una conda, quindi eseguendo pip cercherà prima i pacchetti di conda? Il contrario non è assolutamente vero: l'installazione conda non cerca i pacchetti pypi, nemmeno gli articoli su pypi.binstar.org. Questo è come da conda 3.5.2.
AnneTheAgile

9
È stato rimosso? Se corro, diciamo, conda install autopep8mi dice "Nessun pacchetto trovato" e che dovrei cercare manualmente anaconda.org.
endolith,

Anche @AnneTheAgile running pip...non funziona, non cercherà affatto il pacchetto conda.
Wang,

16

Ho seguito la risposta di @Viktor Kerkez e ho avuto un successo misto. Ho scoperto che a volte questa ricetta di

PACCHETTO conda skeleton pypi

PACCHETTO conda build

sembrerebbe che tutto abbia funzionato ma non sono riuscito a importare con successo il PACCHETTO. Recentemente ho chiesto informazioni sul gruppo utenti Anaconda e ho sentito da @Travis Oliphant stesso il modo migliore di usare conda per compilare e gestire pacchetti che non vengono spediti con Anaconda. Puoi leggere questa discussione qui , ma descriverò l'approccio di seguito per rendere speranzoso le risposte alla domanda del PO più completa ...

Esempio: ho intenzione di installare l'eccellente pacchetto prettyplotlib su Windows usando conda 2.2.5.

1a) conda build --build-recipe prettyplotlib

Vedrai tutti i messaggi di build avere un bell'aspetto fino alla sezione TEST finale della build. Ho visto questo errore

File "C: \ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py", riga 23 import Nessuno Sintassi Errore: impossibile assegnare a nessuno PROVE NON RIUSCITE: prettyplotlib-0.1.3-py27_0

1b) Vai in / conda-recipes / prettyplotlib e modifica il file meta.yaml. Al momento, i pacchetti impostati come nel passaggio 1a comportano file yaml che presentano un errore nella testsezione. Ad esempio, ecco come il mio ha cercatoprettyplotlib

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

Modifica questa sezione per rimuovere la riga vuota preceduta da - e rimuovere anche la riga ridondante prettyplotlib. Al momento della stesura di questo documento ho scoperto che devo modificare la maggior parte dei file meta.yaml come questo per i pacchetti esterni che sto installando con conda, il che significa che c'è una riga di importazione vuota che causa l'errore insieme a un'importazione ridondante del pacchetto dato .

1c) Rieseguire il comando da 1a, che dovrebbe completare senza errore questa volta. Alla fine della build ti verrà chiesto se desideri caricare la build su binstar . Ho inserito No e quindi ho visto questo messaggio:

Se vuoi caricare questo pacchetto su binstar.org in un secondo momento, digita:

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

Quel file tar.bz2 è la build che ora devi effettivamente installare.

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

Seguendo questi passaggi ho usato con successo conda per installare una serie di pacchetti che non vengono forniti con Anaconda. In precedenza, avevo installato alcuni di questi usando pip, così ho fattopip uninstall PACKAGE prima di installare PACKAGE con conda. Usando conda, ora posso gestire (quasi) tutti i miei pacchetti con un solo approccio piuttosto che avere un mix di cose installate con conda, pip, easy_install e python setup.py install.

Per il contesto, penso che questo recente post sul blog di @Travis Oliphant sarà utile per le persone come me che non apprezzano tutto ciò che va nella robusta confezione di Python ma apprezzano sicuramente quando le cose "funzionano". conda sembra un ottimo modo per andare avanti ...


2
Usando la versione 3.5.2 di conda, il comando $ conda build --build-recipe XXX; Errori con "argomenti non riconosciuti: --build-recipe". La risposta completa è; utilizzo: conda-build [-h] [-c] [--no-binstar-upload] [--output] [-s] [-t] [--no-test] [-V] [-q] RECIPE_PATH [RECIPE_PATH ...] conda-build: errore: argomenti non riconosciuti: --build-recipe
AnneTheAgile


3

Penso che ciò che manca qui sia che quando lo fai:

>pip install .

per installare un pacchetto locale con setup.py, installa un pacchetto che è visibile a tutti i conda envs che usano la stessa versione di python. Nota Sto usando la versione conda di pip!

ad esempio, se sto usando python2.7 inserisce qui il pacchetto locale:

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

Se poi creo un nuovo conda env con python = 2.7 (= impostazione predefinita):

>conda create --name new

>source activate new

E poi fai:

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

Tuttavia, se lo faccio:

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

Quindi, in questo caso, conda non è a conoscenza del pacchetto pip, ma il pacchetto è disponibile per Python.

Tuttavia, se invece installo il pacchetto locale (usando nuovamente pip) dopo aver creato (e attivato) il nuovo conda env, ora conda lo vede:

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

Quindi penso che l'interazione tra conda e pip abbia alcuni problemi - vale a dire, usare pip per installare un pacchetto locale all'interno di un conda env rende quel pacchetto disponibile (ma non visto tramite l'elenco conda) a tutti gli altri ambienti conda della stessa versione di Python.



2

Di solito prefisso la cartella 'bin / pip' per l'ambiente specifico in cui si desidera installare il pacchetto prima del comando 'pip'. Ad esempio, se si desidera installare pymc3 nell'ambiente py34, è necessario utilizzare questo comando:

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

Fondamentalmente devi solo trovare il percorso giusto per la cartella 'bin / pip' del tuo ambiente e metterlo prima del comando di installazione.


1

Il mio which pipmostra il seguente percorso:

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

Quindi, qualsiasi pacchetto che installo usando pip install <package-name>dovrà essere riportato nell'elenco dei pacchetti quando l'elenco viene esportato usando:

$ conda list --export > conda_list.txt

Ma io no. Quindi, invece, ho usato il seguente comando come suggerito da molti altri:

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

Ora posso vedere tutti i pacchetti nel mio all-packages.ymlfile.


1

Puoi iniziare installando il comando indicato di seguito nell'ambiente conda:

conda install pip

Seguito dall'installazione di tutti i pacchetti pip necessari nell'ambiente.

Dopo aver installato tutti i pacchetti conda e pip per esportare l'ambiente, utilizzare:

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

Questo creerà il file richiesto nella cartella

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.