2012-11-06 71 views
5

我已經在我的Mac上安裝了Python 2.7作爲框架構建。我已經安裝並確認wxPython適用於這個Python版本。但是,當我創建一個虛擬環境的virtualenv,產生的Python可執行程序是不是一個框架來構建,或至少不按照wxPython的:爲什麼Python在使用virtualenv時突然不會構建Framework?

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.

任何想法?

回答

3

同樣的問題在這裏,pythonw不可用作框架。有一個workaround可用。我們使用它這樣做可以作爲一個框架應用程序捆綁pythonw

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

另一種解決方案是下面的腳本添加到/路徑/要/ VIRTUALENV /斌:

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]" 

然後,只要你想運行GUI(例如wxPython的)使用my_script main.py(確保的virtualenv是活躍

+0

這很簡單,效果很好。我正在運行小牛10.9.2。我將它與本網站上的信息結合使用:http://wiki.wxpython.org/wxPythonVirtualenvOnMac –

3

在10.10.3,使用的virtualenv(通過pyenv如果它很重要),我做了brew install wxmac

我有這個上面我的應用程序腳本

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

的,而且我用這個包裝器來運行我的劇本,叫 '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]" 

fwpy app.py

1

運行它add

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

在VENV 年底啓動腳本

1

回答的設問:Python的在virtualenv中可執行文件是執行主Python可執行程序存根,並且不存在在那裏一束可以自動路徑認可。這導致Foundation.NSBundle.mainBundle()返回NSBundle,只是指向virtualenv中的bin/目錄,沒有關聯Info.plist,因此沒有關聯bundleIdentifier;這使得不可能使用某些API(例如,像您注意到的那樣,Cocoa GUI API)。

我打包這些變通成一個小工具,你可以pip install到您的virtualenv,然後運行:

它現在是相當原始的;你必須在你的virtualenv中做pip install venvdotapp; venvdotapp。如果你正在編寫一些代碼來重新激活你的venv,你也可以做import venvdotapp; venvdotapp.require_bundle()

相關問題