2012-11-06 10 views
5

Ho installato Python 2.7 come build Framework sul mio Mac. Ho installato e confermato che wxPython funziona con questa build di Python. Ma quando creo un ambiente virtuale con virtualenv, l'eseguibile Python risultante non è una build Framework, o almeno non secondo wxPython:Perché i build di Python non vengono improvvisamente creati da Framework quando si utilizza virtualenv?

This program needs access to the screen. 
Please run with a Framework build of python, and only when you are 
logged in on the main display of your Mac.

Tutte le idee?

risposta

3

Lo stesso numero qui, pythonw non è disponibile come Framework. C'è uno workaround disponibile. Stiamo usando in questo modo di rendere pythonw disponibile come pacchetto app quadro:

curl -O https://raw.githubusercontent.com/gldnspud/virtualenv-pythonw-osx/master/install_pythonw.py 
curl -O https://raw.githubusercontent.com/gldnspud/virtualenv-pythonw-osx/master/pythonw.c 
python install_pythonw.py `which python`/../.. 
rm install_pythonw.py pythonw.c 
5

Un'altra soluzione è quella di aggiungere il seguente script/path/to/VIRTUALENV/bin:

ENV=`python -c "import sys; print sys.prefix"` 
PYTHON=`python -c "import sys; print sys.real_prefix"`/bin/python 
export PYTHONHOME=$ENV 
exec $PYTHON "[email protected]" 

Poi , ogni volta che si desidera eseguire GUI (ex wxPython) utilizzare my_script main.py (assicurarsi che sia virtualenv attiva)

+0

Questo è stato facile e funziona bene. Sto eseguendo Mavericks 10.9.2. L'ho usato in combinazione con le informazioni su questo sito: http://wiki.wxpython.org/wxPythonVirtualenvOnMac –

3

Su 10.10.3, utilizzando un virtualenv (via pyenv se è importante), ho fatto un brew install wxmac.

Ho questa cima del mio script applicazione

import site 
site.addsitedir("/usr/local/lib/python2.7/site-packages") 

E io uso questo wrapper per eseguire il mio script, chiamato 'app.py'

#!/bin/bash 

# what real Python executable to use 
PYVER=2.7 
PYTHON=/System/Library/Frameworks/Python.framework/Versions/$PYVER/bin/python$PYVER 

# pythonw is key here! 
PYTHON="pythonw" 

# now run Python with the virtualenv set as Python's HOME 
export PYTHONHOME=$VIRTUAL_ENV 
exec $PYTHON "[email protected]" 

Run con fwpy app.py

1

aggiungi

export PYTHONHOME=$VIRTUAL_ENV 
alias python=/Library/Frameworks/Python.framework/Versions/3.6/bin/python3 # set path to ur python 

alla fine del venv attivare sceneggiatura

1

Per rispondere alla domanda, come ha chiesto: il Python eseguibile nella virtualenv è uno stub che esegue l'eseguibile di Python principale, e non è presente in un percorso in cui un fascio può essere automaticamente riconosciuto. Ciò si traduce in Foundation.NSBundle.mainBundle() restituendo un NSBundle semplicemente indicando la directory bin/ nel virtualenv, senza alcun associato Info.plist e quindi non associato bundleIdentifier; ciò rende impossibile l'utilizzo di determinate API (come, come hai notato, le API della GUI di Cocoa).

ho confezionato queste soluzioni alternative in un piccolo strumento è possibile pip install nella vostra virtualenv e quindi eseguire:

è piuttosto primitiva in questo momento; devi semplicemente fare pip install venvdotapp; venvdotapp nel tuo virtualenv. Puoi anche fare import venvdotapp; venvdotapp.require_bundle() se stai scrivendo del codice che richiede il tuo venv avere un pacchetto.

Problemi correlati