Virtualenv: Opcionalmente, cree un enlace de pythonw en virtualenv para el marco que python se basa en osx

Creado en 14 mar. 2011  ·  34Comentarios  ·  Fuente: pypa/virtualenv

http://groups.google.com/group/python-virtualenv/browse_thread/thread/83fa4a12d22a30c8/744e19c194f1618a?#744e19c194f1618a detalla cómo wxpython podría habilitarse para Python en OSX en virtualenvs por analogía con la forma en que funciona actualmente para win32 y cygwin modos de instalación.

La discusión anterior de Ian a lo largo de estas líneas está aquí:
http://groups.google.com/group/python-virtualenv/browse_thread/thread/b119a3c26aa49238
y el código que lo hace en este momento se enumera aquí:
http://github.com/gldnspud/virtualenv-pythonw-osx/

¿Podemos incluir esto en la distribución principal? ¿Qué debería cambiar sobre el enfoque?


enhancement

Comentario más útil

Intente cambiar el backend de matplotlib para que matplotlib funcione en un entorno virtual:

Hay (al menos) dos soluciones que he usado, con algunos métodos adicionales incluidos a continuación. Ambos descritos aquí deberían hacer lo mismo con un enfoque ligeramente diferente:

Si ya instaló matplotlib usando pip en su entorno virtual, puede ...

_1. Agregue un nuevo archivo matplotlibrc para su entorno virtual_
Por ejemplo, en su entorno virtual, ejecute:

$ cd ~/.matplotlib
$ nano matplotlibrc #to create file using nano

Escriba backend: TkAgg en el archivo y guárdelo al salir. Usted debe ser bueno para ir.

_O _

_2. Edite el archivo matplotlibrc al que hace referencia su entorno virtual_
En su entorno virtual, abra un shell de Python y ejecute:

import matplotlib
matplotlib.matplotlib_fname()
'/home/foo/.config/matplotlib/matplotlibrc'

Nota / Actualización: si obtiene un error de sintaxis en su entorno virtual, es posible que deba simplemente ejecutar:

import matplotlib
matplotlib.matplotlib_fname()

Esto muestra el archivo matplotlibrc al que hace referencia el paquete matplotlib en su entorno virtual. Siga la ruta y abra el archivo matplotlibrc. Edite la etiqueta backend del archivo para leer backend: TkAgg y save

[ También - _Un tercer enfoque_]
No lo he intentado antes, pero de acuerdo con la documentación, debería poder definir el backend al importar matplotlib si no desea cambiar el backend en el propio script:

import matplotlib
matplotlib.use('TkAgg')

(consulte las fuentes a continuación para obtener más explicaciones y métodos adicionales)

Fuentes:
[1] http://matplotlib.org/faq/usage_faq.html#what -is-a-backend
[2] http://matplotlib.org/users/customizing.html#customizing -matplotlib
[3] http://stackoverflow.com/questions/4130355/python-matplotlib-framework-under-macosx
[4] http://stackoverflow.com/questions/29433824/unable-to-import-matplotlib-pyplot-as-plt-in-virtualenv

Todos 34 comentarios

nota, posiblemente duplica el # 47 , pero el problema es un poco más confuso.


Original Comment By: dan mackinlay

+1 en esto.

¿Cuál es el directorio ".Python" que desea vincular
http://github.com/gldnspud/virtualenv-pythonw-osx/ ? No veo ningún .Python mi venv.

En cambio, veo esto:

 (py27) $ laf /Users/glind/venvs/py27//include/python2.7
 /Users/glind/venvs/py27//include/python2.7@ -> /usr/local/Cellar/python/2.7.2/include/python2.7
 (py27) $ which python
 /Users/glind/venvs/py27/bin/python

Este error se manifiesta de varias formas:

http://stackoverflow.com/questions/3692928/why-doesnt-the-save-button-work-on-a-matplotlib-plot
http://code.google.com/p/iterm2/issues/detail?id=1680

La razón por la que no había .Python fue porque en mi inicial estaba saliendo de un brew install python . Solo brew install python --framework y otras instalaciones de Framework obtienen .Python dynlib.

¿Una solución para esto a la vista? Todavía tengo el problema con las ventanas tímidas de Matplotlib

Este problema tiene 4,5 años y requiere trucos feos para que matplotlib se ejecute en Mac OSX . ¿Podemos arreglar esto?

Secundo esto. Instalé Python 2.7 y luego creé virtualenv usando los siguientes comandos:

brew install python --framework
virtualenv env
source env/bin/activate
pip install matplotlib

Pero recibo el siguiente mensaje cuando intento importar matplotlib.pyplot .

Python 2.7.10 (default, Aug 22 2015, 20:33:39)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.1)] on darwin
>>> import matplotlib.pyplot as plt
...
    from matplotlib.backends import _macosx
RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are Working with Matplotlib in a virtual enviroment see 'Working with Matplotlib in Virtual environments' in the Matplotlib FAQ

La solución alternativa mencionada por @ nils-werner funciona. Pero es un gran bloqueador para principiantes que quieren trabajar con matplotlib (no solo) en jupyter notebook en virtualenv.

Escribí una guía detallada sobre cómo solucionar este problema, http://blog.rousek.name/2015/11/29/adventure-with-matplotlib-virtualenv-and-macosx/

Ugh ....... Acabo de hacer esto también, luego de una actualización a matplotlib 1.5 (que ahora no puede importar un backend, como lo documenta arriba @stlk). Estoy usando un brebaje instalado Python 3.5.

Estaba pasando por una introducción a la visualización usando el capítulo de Python, y ni siquiera puedo comenzar a escribir la primera muestra de código en jupyter porque sigo encontrando este problema en una Mac ... Estoy usando el sistema Python que viene con mac + virtualenv .

+1

+1
Oh Dios....
Problema de 2011 .. aún no se ha solucionado .

Mientras tanto, la utilidad que está vinculada en este número (y en las preguntas frecuentes) todavía me funcionó:

$ # install the utility
$ pip install git+https://github.com/gldnspud/virtualenv-pythonw-osx.git
$ # enter the virtualenv with virtualenvwrapper (or manually)
$ workon my-venv
$ # double-check that this is your venv Python binary
$ which python
/Users/macbook/.virtualenvs/my-venv/bin/python
$ # fix it, using magic
$ fix-osx-virtualenv `which python`/../..

Sí, es bastante simple, pero me tomó un tiempo averiguarlo. No tengo idea de lo que hace esto, pero como resultado, Matplotlib funciona simplemente invocándolo usando ese binario venv Python, sin necesidad de una función de shell de envoltura.

Conozco esta solución pero:

  • Necesita repetir (y recordar cómo hacerlo) para todos sus virtualenvs
  • Hace que sea imposible construir ciertos módulos externos o cuando se usa CFFI o algo así (tendrá que ir a verificar qué era exactamente)

No se siente como una solución ideal, pero una solución fácil es usar virtualenvwrapper y luego usar los ganchos para configurar las cosas. Instale virtualenv-pythonw-osx y virtualevnwrapper, obtenga el archivo virtualenvwrapper.sh para crear los scripts de gancho, luego agregue lo siguiente al script postactivate :

if [ ! -d $VIRTUAL_ENV/Python.app ]; then
  echo Fixing OSX Python display issues...
  fix-osx-virtualenv $VIRTUAL_ENV
fi

Esto arreglará automáticamente cualquier entorno virtual cuando lo active a través del comando workon

+1

+1

+1

Solo dale a este error también. La solución alternativa sugerida no es exactamente elegante. ¡Sería genial que lo arreglaran!

Intente cambiar el backend de matplotlib para que matplotlib funcione en un entorno virtual:

Hay (al menos) dos soluciones que he usado, con algunos métodos adicionales incluidos a continuación. Ambos descritos aquí deberían hacer lo mismo con un enfoque ligeramente diferente:

Si ya instaló matplotlib usando pip en su entorno virtual, puede ...

_1. Agregue un nuevo archivo matplotlibrc para su entorno virtual_
Por ejemplo, en su entorno virtual, ejecute:

$ cd ~/.matplotlib
$ nano matplotlibrc #to create file using nano

Escriba backend: TkAgg en el archivo y guárdelo al salir. Usted debe ser bueno para ir.

_O _

_2. Edite el archivo matplotlibrc al que hace referencia su entorno virtual_
En su entorno virtual, abra un shell de Python y ejecute:

import matplotlib
matplotlib.matplotlib_fname()
'/home/foo/.config/matplotlib/matplotlibrc'

Nota / Actualización: si obtiene un error de sintaxis en su entorno virtual, es posible que deba simplemente ejecutar:

import matplotlib
matplotlib.matplotlib_fname()

Esto muestra el archivo matplotlibrc al que hace referencia el paquete matplotlib en su entorno virtual. Siga la ruta y abra el archivo matplotlibrc. Edite la etiqueta backend del archivo para leer backend: TkAgg y save

[ También - _Un tercer enfoque_]
No lo he intentado antes, pero de acuerdo con la documentación, debería poder definir el backend al importar matplotlib si no desea cambiar el backend en el propio script:

import matplotlib
matplotlib.use('TkAgg')

(consulte las fuentes a continuación para obtener más explicaciones y métodos adicionales)

Fuentes:
[1] http://matplotlib.org/faq/usage_faq.html#what -is-a-backend
[2] http://matplotlib.org/users/customizing.html#customizing -matplotlib
[3] http://stackoverflow.com/questions/4130355/python-matplotlib-framework-under-macosx
[4] http://stackoverflow.com/questions/29433824/unable-to-import-matplotlib-pyplot-as-plt-in-virtualenv

@ wwp3 Excelente

import matplotlib
matplotlib.use('TkAgg')

Trabajando para mejorar los documentos de Matplotlib para este problema @stlk cualquier objeción al uso de parte de su guía para solucionar el problema del cuaderno de Jupyter (ya hemos cubierto el terminal python / ipython)

@jenshnielsen Siéntase libre de usarlo, estoy feliz de que sea útil.

+1

¿Esto está resuelto? Si es así, ¿alguien puede solucionar el problema?

No es

Absolutamente no. Es peor que nunca, ya que se bloquea en import . pasos para reproducir

virtualenv test
source test/bin/activate
pip install matplotlib
python -c "import matplotlib.pyplot; print 'import succeeded'"

¿Hay un PR que solucione esto? Si es así, ¿las personas que encontraron el problema lo probaron y confirmaron que resuelve el problema? Si no lo hay, ¿alguien está trabajando en uno? Va a ser más o menos imposible para cualquiera que no pueda reproducir el problema (lo que, supongo, necesita una instalación de OSX como mínimo) desarrollar una solución, así que confiamos en las contribuciones aquí.

@ nils-werner gracias por la clara descripción de cómo reproducir. Si pudiera agregar detalles del entorno (todo lo que veo en el hilo es "OSX", pero nada específico sobre si son todas las versiones, qué versión de virtualenv y python y cómo se instalaron, si es necesario instalar algunas otras cosas, cómo instalarlos, etc.) que también sería útil.

Entonces, es de esperar que alguien con acceso a un entorno adecuado pueda producir un PR y hacer referencia a él aquí. En esa etapa, podemos revisar el RP y partir de ahí.

@pfmoore He estado usando la solución en mi comentario anterior , que todavía me funciona constantemente. - Aunque no estoy seguro de cómo funciona. También vea el siguiente comentario de @ nils-werner.

(Para el registro: OS X 10.11.6, Python 3.5.2, matplotlib-1.5.3.)

@ nils-werner La única razón por la que es peor es que verificamos explícitamente una compilación de marco antes de ejecutar el backend de OSX en Matplotlib https://github.com/matplotlib/matplotlib/blob/master/src/_macosx.m#L3071

La alternativa es una falla suave donde la interfaz gráfica de usuario es solo parcialmente funcional.

WXPython tiene una compilación de verificación similar en la que le impide usar WXPython desde una compilación que no sea un marco.

La mejor solución es usar venv de la biblioteca estándar si está usando python3
A diferencia de virtualenv que funciona correctamente.
http://matplotlib.org/devdocs/faq/osx_framework.html#introduction

Bien, supongo que si nadie está trabajando en un PR, la resolución aquí es:

  1. Si está en Python 3, use stdlib venv
  2. De lo contrario, utilice la solución alternativa indicada.

Frio. No estoy seguro de si vale la pena dejar el problema abierto en ese caso; hay una solución clara y cualquier corrección de código sería un nuevo PR de todos modos. Sugiero que cerremos el tema, ¿comentarios?

¿Alguna actualización sobre esto? Sería bueno tener esto arreglado en lugar de tener que usar soluciones alternativas.

@ wwp3 ¡ Genial, gracias! Lo arreglé con éxito con esta opción:

  1. Agregue un nuevo archivo matplotlibrc para su entorno virtual
    Por ejemplo, en su entorno virtual, ejecute:

$ cd ~ / .matplotlib
$ nano matplotlibrc #para crear un archivo usando nano
Escriba backend: TkAgg en el archivo y guárdelo al salir. Usted debe ser bueno para ir.

@stlk que fue útil gracias

Este problema se ha marcado automáticamente como obsoleto porque no ha tenido actividad reciente. Se cerrará si no se produce más actividad. Simplemente agregue un comentario si desea mantenerlo abierto. Gracias por sus aportaciones.

Intente cambiar el backend de matplotlib para que matplotlib funcione en un entorno virtual:

Hay (al menos) dos soluciones que he usado, con algunos métodos adicionales incluidos a continuación. Ambos descritos aquí deberían hacer lo mismo con un enfoque ligeramente diferente:

Si ya instaló matplotlib usando pip en su entorno virtual, puede ...

_1. Agregue un nuevo archivo matplotlibrc para su entorno virtual_
Por ejemplo, en su entorno virtual, ejecute:

$ cd ~/.matplotlib
$ nano matplotlibrc #to create file using nano

Escriba backend: TkAgg en el archivo y guárdelo al salir. Usted debe ser bueno para ir.

_ _O __

_2. Edite el archivo matplotlibrc al que hace referencia su entorno virtual_
En su entorno virtual, abra un shell de Python y ejecute:

import matplotlib
matplotlib.matplotlib_fname()
'/home/foo/.config/matplotlib/matplotlibrc'

Nota / Actualización: si obtiene un error de sintaxis en su entorno virtual, es posible que deba simplemente ejecutar:

import matplotlib
matplotlib.matplotlib_fname()

Esto muestra el archivo matplotlibrc al que hace referencia el paquete matplotlib en su entorno virtual. Siga la ruta y abra el archivo matplotlibrc. Edite la etiqueta backend del archivo para leer backend: TkAgg y save

[ También - _Un tercer enfoque_]
No lo he intentado antes, pero de acuerdo con la documentación, debería poder definir el backend al importar matplotlib si no desea cambiar el backend en el propio script:

import matplotlib
matplotlib.use('TkAgg')

(consulte las fuentes a continuación para obtener más explicaciones y métodos adicionales)

Fuentes:
[1] http://matplotlib.org/faq/usage_faq.html#what -is-a-backend
[2] http://matplotlib.org/users/customizing.html#customizing -matplotlib
[3] http://stackoverflow.com/questions/4130355/python-matplotlib-framework-under-macosx
[4] http://stackoverflow.com/questions/29433824/unable-to-import-matplotlib-pyplot-as-plt-in-virtualenv

Tu primera solución es genial y ha resuelto mi problema. ¡Gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones