2012-11-06 47 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()

相关问题