2012-11-06 36 views
5

Tôi đã cài đặt Python 2.7 làm Framework được xây dựng trên máy Mac của mình. Tôi đã cài đặt và xác nhận rằng wxPython làm việc với bản dựng Python này. Nhưng khi tôi tạo một môi trường ảo với virtualenv, kết quả Python thực thi không phải là một Framework build, hoặc ít nhất không theo wxPython:Tại sao Python xây dựng đột ngột không phải khung xây dựng khi sử dụng 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.

Bất kỳ ý tưởng nào?

Trả lời

3

Cùng một vấn đề ở đây, pythonw không có sẵn dưới dạng Khung. Có sẵn workaround. Chúng tôi đang sử dụng nó như thế này để làm cho pythonw sẵn như là một gói ứng dụng Khung:

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

giải pháp khác là thêm đoạn mã sau vào/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]" 

Sau đó, , bất cứ khi nào bạn muốn chạy GUI (ví dụ wxPython) sử dụng my_script main.py (đảm bảo rằng virtualenv là hoạt động)

+0

Điều này thật dễ dàng và hoạt động tốt. Tôi đang chạy Mavericks 10.9.2. Tôi đã sử dụng nó kết hợp với thông tin trên trang web này: http://wiki.wxpython.org/wxPythonVirtualenvOnMac –

3

On 10.10.3, sử dụng một virtualenv (thông qua pyenv nếu vấn đề), tôi đã làm một brew install wxmac.

Tôi có điều này trên đỉnh của kịch bản ứng dụng của tôi

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

Và tôi sử dụng wrapper này để chạy kịch bản của tôi, được gọi là '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 nó với fwpy app.py

1

thêm

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

vào cuối venv kích hoạt kịch bản

1

Để trả lời những câu hỏi như hỏi: Python thực thi trong virtualenv vẫn còn sơ khai mà thực hiện thực thi Python chính, và không có mặt tại một con đường mà một gói có thể được tự động được công nhận. Điều này dẫn đến việc Foundation.NSBundle.mainBundle() trả lại số NSBundle chỉ cần trỏ vào thư mục bin/ trong virtualenv, không có liên kết Info.plist và do đó không có liên kết bundleIdentifier; điều này làm cho nó không thể sử dụng các API nhất định (như, như bạn đã thấy, các API GUI của Cocoa).

tôi đóng gói lên những cách giải quyết thành một công cụ nhỏ, bạn có thể pip install vào virtualenv của bạn và sau đó chạy:

Nó khá nguyên thủy ngay bây giờ; bạn chỉ cần thực hiện pip install venvdotapp; venvdotapp trong virtualenv của mình. Bạn cũng có thể thực hiện import venvdotapp; venvdotapp.require_bundle() nếu bạn đang viết một số mã để kiểm tra lại venvv của bạn.

Các vấn đề liên quan