【问题标题】:Why are Python builds suddenly not Framework builds when using virtualenv?为什么使用 virtualenv 时 Python 构建突然不是 Framework 构建?
【发布时间】:2012-10-26 08:06:36
【问题描述】:

我已经在我的 Mac 上安装了 Python 2.7 作为框架构建。我已经安装并确认 wxPython 可以与这个 Python 版本一起使用。但是当我使用 virtualenv 创建虚拟环境时,生成的 Python 可执行文件不是框架构建,或者至少不是根据 wxPython:

此程序需要访问屏幕。
请使用 python 的框架构建运行,并且仅当您是
在 Mac 的主显示屏上登录。

有什么想法吗?

【问题讨论】:

    标签: python macos wxpython virtualenv


    【解决方案1】:

    回答所问的问题:virtualenv 中的 Python 可执行文件是一个执行主要 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()

    【讨论】:

      【解决方案2】:

      添加

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

      在 venv activate 脚本的末尾

      【讨论】:

        【解决方案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 "$@"
        

        使用fwpy app.py 运行它

        【讨论】:

          【解决方案4】:

          同样的问题,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】:

            另一种解决方案是将以下脚本添加到/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 "$@"
            

            然后,每当您想运行 GUI(例如 wxPython)时,请使用 my_script main.py(确保 virtualenv 处于活动状态

            【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-06-12
            • 2020-06-25
            • 2011-02-17
            • 2019-03-26
            • 2015-10-07
            • 1970-01-01
            相关资源
            最近更新 更多