2016-06-29 36 views
15

Ho appena scoperto che matplotlib ha un problema con gli ambienti virtuali. Ho provato le soluzioni nel FAQs ma non hanno funzionato. Una soluzione ideale dovrebbe coinvolgere solo i comandi pip, ma potrebbe essere difficile o non realistico richiederlo. Ad ogni modo, ho provato quello che avevano nella sezione OS X per creare un file bash framework nella cartella venv ed eseguire il comando attraverso di esso.Qual è il modo più semplice per far funzionare matplotlib in OSX in un ambiente virtuale?

$ frameworkpython krls.py 

quando l'ho fatto che ho avuto un errore di autorizzazione Deniel:

Permission denied 

Sono sorta di paura di sudoing comandi che io non sono al 100% quello che fanno ... in ogni caso, sembrava che la lo script di bash non sta facendo nulla di troppo pericoloso, quindi sono andato avanti e lo ho fatto sudo. Tuttavia, la risposta del mio terminale è stato strano, ha detto:

sudo frameworkpython krsl.py 
sudo: frameworkpython: command not found 

il che significa che non riconosce frameworkpython come un comando. Senza il sudo si dice:

frameworkpython krsl.py -bash:/Users/my_name/percorso/venv/bin/frameworkpython: Permesso negato

che sembra riconosce frameworkpython come un comando ma (?) non l'hai eseguito a causa di permessi? Mi sembra strano. Qualche idea?


Ho anche provato:

$ pip install TKAgg 
Collecting TKAgg 
    Could not find a version that satisfies the requirement TKAgg (from versions:) 
No matching distribution found for TKAgg 

ma non ha funzionato.

così ho provato l'opzione successiva che sta usando PySide che, inoltre, non ha funzionato e ha dato un gigante uscita di errore:

$ pip install pyside 
Collecting pyside 
    Using cached PySide-1.2.4.tar.gz 
Building wheels for collected packages: pyside 
    Running setup.py bdist_wheel for pyside ... error 
    Complete output from command /Users/my_name/path/venv/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/private/var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-build-_yzDki/pyside/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/tmpUR9qFCpip-wheel- --python-tag cp27: 
    Removing /private/var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-build-_yzDki/pyside/pyside_package 
    running bdist_wheel 
    running build 
    Python architecture is 64bit 
    error: Failed to find cmake. Please specify the path to cmake with --cmake parameter. 

    ---------------------------------------- 
    Failed building wheel for pyside 
    Running setup.py clean for pyside 
Failed to build pyside 
Installing collected packages: pyside 
    Running setup.py install for pyside ... error 
    Complete output from command /Users/my_name/path/venv/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/private/var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-build-_yzDki/pyside/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-UVA_F4-record/install-record.txt --single-version-externally-managed --compile --install-headers /Users/my_name/path/venv/bin/../include/site/python2.7/pyside: 
    Removing /private/var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-build-_yzDki/pyside/pyside_package 
    running install 
    running build 
    Python architecture is 64bit 
    error: Failed to find cmake. Please specify the path to cmake with --cmake parameter. 

    ---------------------------------------- 
Command "/Users/my_name/path/venv/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/private/var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-build-_yzDki/pyside/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-UVA_F4-record/install-record.txt --single-version-externally-managed --compile --install-headers /Users/my_name/path/venv/bin/../include/site/python2.7/pyside" failed with error code 1 in /private/var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-build-_yzDki/pyside/ 

Dopo di che poi ho provato l'opzione successiva utilizzando WX Phonix. Sfortunatamente, ho visitato il loro sito e non sono riuscito a trovare il modo di farlo.

+0

Hai provato a installare 'wheel' via pip? (e aggiornando pip/wheel/setuptools) – sytech

+0

@Gator_Python Ho fatto una lista di pip e dice che ho wheel (0.29.0). Ho provato ad aggiornarlo con 'pip install wheel --upgrade', ma sembrava fallire perché diceva' Requisito già aggiornato: ' –

+3

Il * più semplice * potrebbe essere usare [anaconda] (https: // docs. continuum.io/anaconda/install#anaconda-for-os-x-graphical-install) - So che non è esattamente la risposta ideale, ma continuerò a cercare. Anaconda sarebbe un ambiente separato. Comprende [tutti questi pacchetti] (https://docs.continuum.io/anaconda/pkg-docs) – sytech

risposta

6

Aggiornamento:

Con python3, è possibile utilizzare l'applicazione incorporata di virtualenv via -m venv:

python -m venv <name of virtualenv> 
source <name of virtualenv>/bin/activate 

implementazione built-in di python3 costruisce la virtualenv tale che Python è impostato come un quadro , quindi non c'è bisogno di configurare nulla per farlo funzionare. Maggiori dettagli here.


risposta originale:

Come indicato nella FAQS you reference, sarà necessario creare un frameworkpython script in venv/bin. Sembra che il tuo sistema non sia in grado di trovare frameworkpython quindi non è sul tuo sistema $PATH o non è eseguibile.

Assicurati di rendere questo script eseguibile tramite chmod +x venv/bin/frameworkpython!

Da Linux/Unix docs (ho aggiunto il grassetto):

PATH is an environmental variable in Linux and other Unix-like operating systems that tells the shell which directories to search for executable files.

vostro sistema solo look per file eseguibili accessibili tramite la variabile PATH ambiente, saltando i file non eseguibili.


Creazione dello script frameworkpython è necessario perché matplotlib richiede un accumulo quadro di pitone. Dal link qui sopra:

Unfortunately virtualenv creates a non framework build even if created from a framework build of Python.

Ecco un altro post con maggiori dettagli sul quadro costruisce

+0

perché ho dovuto cambiare la cosa eseguibile della sceneggiatura? sembra strano, vero? –

+0

Aggiornato sopra Risposta breve: '$ PATH' trova solo i file eseguibili –

+0

Perché non ho bisogno di eseguire lo script 'frameworkpython' ogni volta che attivo il mio ambiente? Sembra che il file cambi solo le cose del percorso ma io non lo eseguo copione ogni volta che attivo il mio ambiente. –

0
sudo apt-get install tk-dev libpng-dev libffi-dev dvipng texlive-latex-base 

Poi disinstallato e reinstallato matplotlib:

pip uninstall matplotlib 

pip install matplotlib 
+0

che è per Linux ... il mio problema è OSX (vedi titolo) –

+0

ahh. Non ho visto quello, cercherò di trovare la soluzione giusta per te. – user3480223

+0

non preoccuparti, succede al meglio di noi. –

2

da far funzionare PySide:

brew install cmake 

birra è una dipendenza abbastanza standard OSX.

Hai ragione ad identificare che si tratta di un problema di framework Differences between Framework and non-Framework builds of Python on Mac OS X Per ottenere ciò, è necessario eseguire il framework python.

E ancora più corretto nei comandi sudo non in esecuzione senza comprenderli. Perché potresti essere in grado di vederlo, ma non essere in grado di eseguirlo potrebbe essere dovuto al fatto che l'ambiente non è stato impostato correttamente come sudo. How to keep Environment Variables when Using SUDO

se si esegue dovrebbe mostrare il percorso dell'eseguibile sul file system. Vorrei controllare i permessi dei file su questo file, in particolare controllare la proprietà.

ls -l $(which frameworkpython) 

L'ouptut di which frameworkpython dovrebbe essere il percorso che potrebbe essere eseguito con la radice, ma vorrei evitarlo, come qualsiasi altro dipendenze potrebbero non essere caricati correttamente, oppure può avere i permessi errati impostati, potrebbe funzionare ora ma ti metterò nei guai più tardi.

/path/to/frameworkpython krls.py 

Quando mi sono imbattuto in questo numero this blog era una risorsa eccezionale.

3

Proprio come la configurazione, io sto usando matplotlib all'interno di un ambiente virtuale su OSX.

Vedo che hai speso un po 'di impegno per far funzionare le cose e non sono sicuro che questo risolverà il problema, dal momento che non ci sono due configurazioni uguali. Tuttavia, lascio la configurazione in modo da poter confrontare e possibilmente trovare qualcosa che ti aiuti a risolvere questo problema.

Disclaimer: Io uso virtualenvwrapper e ho memorizzato le mie venature sotto ~/.virtualenvs/.

  1. Copiare il file frameworkpython a ~/.virtualenvs/YOUR_VENV/bin

  2. Assicurarsi di cambiare la variabile PATHTOPYTHON all'interno dello script bash frameworkpython per fare riferimento alla posizione corretta. Per la mia messa a punto, ho cambiato a /usr/bin/ (mentre l'impostazione originale era /usr/local/bin)

  3. Set bandiera eseguibile chmod +x frameworkpython

  4. Installare librerie utilizzando pip come al solito dopo il passaggio a un ambiente virtuale utilizzando virtualenvwrapper: workon YOUR_VENV

Sourcing frameworkpython come utente normale (! radice, pls) e importazione matplotlib rendimenti:

$ ./frameworkpython 
Python 2.7.0 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import matplotlib as mpl 
>>> mpl.__version__ 
'1.5.1' 
>>> import matplotlib.pyplot as plt 
>>> ^D 
+0

sembra che fosse un problema di autorizzazioni. Perché pensi che ho dovuto cambiare la bandiera? –

+0

Sul secondo punto 2), come faccio a sapere qual è la posizione corretta da riferire al mio pitone? Recentemente ho creato un nuovo ambiente con python 3.5 e non riesco a far funzionare la cosa di frameworkpython. Dice che il comando 'frameworkpython' non esiste, il che significa che non può trovarlo. Vedo il file frameworkpython e cambia solo le cose dell'ambiente, ma quando lo eseguo si blocca tutto il mio terminale, è un po 'strano. Hai avuto modo di lavorare con Python 3.5? –

+0

Scusate, non ho provato questo per python 3.x - avete controllato le FAQ e il contenuto di 'frameworkpython''? – jbndlr

3

Estendendo i suggerimenti di @ Gator_Python e @ juanpa.arrivillaga, consiglio di installare l'ultima versione di anaconda. È un gestore di pacchetti multipiattaforma e simil-piattaforma che gestisce anche ambienti virtuali. Installa anche pacchetti di grandi dimensioni come numpy, pandas e matplotlib con poco mal di testa.

Impostazione: Dalla riga di comando, è sufficiente creare un ambiente virtuale e installare da lì. Ecco un esempio di come impostare Conda (sostituire il nome ambiente appropriato e il numero di versione di Python, rispettivamente):

conda update conda 
conda update anaconda 
conda create -n <envname> python=<version> matplotlib 
source activate <envname> 
conda info --envs     # show current env 
conda list       # see installed env packages 

Questo dovrebbe mettere voi in un ambiente pulito isolato. È possibile visualizzare un elenco minimo di pacchetti installati in questo ambiente. Assicurarsi che siano elencati pip e setuptools (vengono installati automaticamente). Per qualsiasi altro pacchetto necessario, utilizzare conda install <package> o pip install <package>, in questo ordine.Installare il progetto:

cd <path\to\project> 
python setup.py develop 

rimozione: Quando si è pronti a rimuovere il proprio ambiente:

source deactivate 
conda env remove -n <envname> 

Nota: alternative al setup.py develop sono:

0

fare eco la risposta di Pedro Cattori, il modo più semplice che ha lavorato ogni volta per me è di usare semplicemente python 3 con un ENV virtuale come in:

python -m venv my-virtualenv 
source my-virtualenv/bin/activate 

o

python3 -m venv my-virtualenv 
source my-virtualenv/bin/activate 

dalla pagina delle domande frequenti originale: http://matplotlib.org/faq/osx_framework.html#osxframework-faq

Tutto il resto che ho provato ha provocato una quantità ridicola di c ode e tempo trascorso a capire che cosa non va. Con ciò funziona sempre ogni volta senza che io possa fare molto di più oltre la pip di installazione di matplotlib.