【问题标题】:How do I install wxPython in virtualenv如何在 virtualenv 中安装 wxPython
【发布时间】:2012-05-05 00:10:51
【问题描述】:

我在 Mac OSX Lion 机器上,我已经下载了 wxPython-src-2.9.3.1.tar.bz2。然后我做了以下操作(注意:输出消息已被删除):

$ tar -xjf wxPython-src-2.9.3.1.tar.bz2
$ cd wxPython-src-2.9.3.1
$ mkdir bld
$ cd bld
$ source /path/to/myvirtualenv/bin/activate
(myvirtualenv)$ cross_compiling=yes
(myvirtualenv)$ export MACOSX_DEPLOYMENT_TARGET=10.6.7
(myvirtualenv)$ set arch_flags="-arch ppc64 "
(myvirtualenv)$ ../configure \
--with-mac --enable-monolithic --enable-threads --enable-unicode \
--enable-debug_flag --enable-debug \
--with-libpng --with-libjpeg --with-libtiff --enable-unicode \
--with-opengl --enable-graphics_ctx --with-odbc --enable-gui \
--with-macosx-sdk=/Developer/SDKs/MacOSX10.6.sdk --with-macosx-version-min=10.6 \
CFLAGS="$arch_flags" CXXFLAGS="$arch_flags" CPPFLAGS="$arch_flags" LDFLAGS="$arch_flags" OBJCFLAGS="$arch_flags" OBJCXXFLAGS="$arch_flags" --prefix=/path/to/myvirtualenv/
$ (myvirtualenv)make
$ (myvirtualenv)make install

在那之后,我确实收到了这条消息(所以我猜它成功了):

...
 ------------------------------------------------------

 The installation of wxWidgets is finished.  On certain
 platforms (e.g. Linux) you'll now have to run ldconfig
 if you installed a shared library and also modify the
 LD_LIBRARY_PATH (or equivalent) environment variable.

 wxWidgets comes with no guarantees and doesn't claim
 to be suitable for any purpose.

 Read the wxWindows Licence on licencing conditions.

 ------------------------------------------------------

然后让我回到我的壳里。但是,我似乎无法使用它

(myvirtualenv)$ python
>>> import wxversion
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named wxversion

有什么想法可以将它安装到我的 virtualenv 中吗?

【问题讨论】:

  • 你为 installdir 放了什么?

标签: python windows macos wxpython virtualenv


【解决方案1】:

对于其他人来说,这对我有用:

在 Mac OSX 上,我使用 Homebrew 安装了 wxpython:

brew install wxpython

进入你的 virtualenv 站点包目录:

cd /venv/lib/python2.7/site-packages

然后链接wx.pth

ln -s /usr/local/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/wx.pth wx.pth

然后链接wx-3.0-osx_cocoa目录:

ln -s /usr/local/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/wx-3.0-osx_cocoa wx-3.0-osx_cocoa

【讨论】:

  • 我可以用 brew 安装 wxpython,但是 /venv 文件夹不存在?
【解决方案2】:

看完以上所有文章,这才是真正的关键:

您需要将您的 VE 指向主要的 python 安装。

在我的系统上:

% ln /Library/Python/2.7/site-packages/wxredirect.pth ./default/lib/python2.7/site-packages/wxredirect.pth

【讨论】:

  • 我认为在这个命令中,“default”是你的 VE 环境的名称,对吧?这不是完全明显:)
【解决方案3】:

对于 Windows,您可以使用 cweston 为 OS X 概述的相同方法,转换为对 mklink 的调用。通过执行以下操作,我成功地为基于 Python 2.7 / WxPython 2.8 的旧应用程序创建了 virtualenv:

使用安装程序安装 WxPython。

找到安装 WxPython 的站点包目录。对我来说,

C:\Python27\Lib\site-packages

打开一个 shell 并切换到你想要添加 WxPython 的 virtualenv 中的 site-packages 目录,比如说它叫做WxApp

cmd
cd C:\Virtualenvs\WxApp\Lib\site-packages

然后创建链接:wx.pth 和 wxversion.py 的硬链接,以及包含 WxPython 安装目录的连接(我的是 wx-2.8-msw-unicode):

mklink /h wx.pth C:\Python27\Lib\site-packages\wx.pth
mklink /h wxversion.py C:\Python27\Lib\site-packages\wxversion.py
mklink /j wx-2.8-msw-unicode C:\Python27\Lib\site-packages\wx-2.8-msw-unicode\

现在我可以访问wx 模块:

C:\> C:\VirtualEnvs\WxApp\scripts\activate.bat
(WxApp) C:\>python
ActivePython 2.7.2.5 (ActiveState Software Inc.) based on Python 2.7.2 (default, Jun 24 2011, 12:21:10) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import wx
>>> wx.version()
'2.8.12.1 (msw-unicode)'
>>>

【讨论】:

    【解决方案4】:

    我为我的项目编写了一个小脚本来解决这个问题。觉得分享一下会很好。

    我有以下设置:

    • python 和 wxpython 通过 home-brew 安装
    • 使用 virtualenvwrapper 管理虚拟环境

    使用 mkproject 启动新项目后,我运行以下脚本来解决此问题。

    #!/usr/bin/env bash
    
    echo This script fixes issues with wxpython and virtualenv on mac os. >&2
    echo It needs to be run inside a virtualenv created with virtualenvwrapper. >&2
    echo It also assumes that wxpython was installed through homebrew. >&2
    echo
    
    PYTHON_FULL_VERSION=$(python --version 2>&1 | awk -F ' ' '{ print $2 }')
    PYTHON_SHORT_VERSION=$(python -c 'import sys; print "%d.%d" % (sys.version_info[0], sys.version_info[1])')
    
    echo detected python version: "$PYTHON_FULL_VERSION" >&2
    
    [ -d "$VIRTUAL_ENV" ] || { echo "ERROR: First activate the virtualenvironment." >&2; exit 1; }
    
    # PART 1: Add homebrew-installed wx to env's site-packages
    HOMEBREW_SITE_PKG="/usr/local/lib/python${PYTHON_SHORT_VERSION}/site-packages"
    VENV_SITE_PKG="${VIRTUAL_ENV}/lib/python${PYTHON_SHORT_VERSION}/site-packages"
    
    ln -s "${HOMEBREW_SITE_PKG}/wx.pth" "$VENV_SITE_PKG"
    ln -s "${HOMEBREW_SITE_PKG}/wx-3.0-osx_cocoa" "$VENV_SITE_PKG"
    
    # PART 2: At activation of venv we set PYTHONHOME
    # NB This needs virtualenvwrapper to work
    echo 'export PYTHONHOME="$VIRTUAL_ENV"' >> "${VIRTUAL_ENV}/bin/postactivate"
    
    # PART 3: link the pythonw executable in the virtualenv
    PYTHONW="/usr/local/Cellar/python/${PYTHON_FULL_VERSION}/bin/pythonw"
    ln -s "$PYTHONW" "${VIRTUAL_ENV}/bin/pythonw"
    
    echo "You should now re-activate the environment."
    

    【讨论】:

      【解决方案5】:

      我相信最干净的方法是让您的系统 python 从您的开发工作中尽可能干净。你在其中添加的随机内容越多,你就越有可能遇到一些晦涩难懂的问题。

      但是

      因为它是系统范围的 brew 安装,这是 wxPython 最简单的选择,由于某种原因,它似乎没有适当的 python 打包/pip 集成。在这种情况下,它将进入您的系统范围的站点包。

      virtualenv 支持以只读方式将系统范围的站点包链接到 virtualenv。确保使用 --system-site-packages 开关创建 virtualenv。这将使其对底层 python 安装透明。

      我希望这可以帮助人们在未来遇到这个问题。

      【讨论】:

        【解决方案6】:

        那是因为当您安装您的 python 版本时,您必须要求 CPython 安装必须使用 --enable-framework。 因此,在您的 Mac 上,您必须运行以下命令:

        $ env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.x.x
        

        【讨论】:

          猜你喜欢
          • 2011-10-31
          • 2011-10-22
          • 1970-01-01
          • 2012-04-26
          • 2011-04-20
          • 2016-08-30
          • 2020-06-18
          • 2014-02-10
          • 1970-01-01
          相关资源
          最近更新 更多