macOS在virtualenv中使用wxPython報錯

zhuxiaoxi發表於2018-11-09

在虛擬的Python環境中執行GUI的軟體報錯

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.

這個問題其實我認為是virtualenv的bug,但好像設計就是這個樣子。

所以只能hacker一下了

以下內容來自於StackOverflow,根據自身情況有所修過

#!/usr/bin/env zsh
#move it into virtualenv/bin
ENV=`python -c "import sys; print(sys.prefix)"`
PYTHON=`python -c "import sys; print(sys.real_prefix)"`/bin/python3
export PYTHONHOME=$ENV
exec $PYTHON "$@"

具體表達一下這段程式碼但意思吧。先把他儲存成指令碼放在virtualenv的bin目錄下面。一定要在進入virtualenv後執行指令碼,hacker才可以正常生效。
首先獲取當前Python的位置,一般是工作目錄的virtualenv下面。
再獲取這個Python的真實檔案位置,用真實的檔案去跑程式。
這裡有個疑問就是,那我的pip環境怎麼辦?
其實是這樣的,倒數第二行,PYTHONHOME變數就是控制這個的,這也就是為什麼需要獲取那個虛擬的Python位置的原因。
最後一行就是執行。

我的工作目錄是sub2,裡面有個ENV目錄這裡是儲存虛擬環境的。我將上面的指令碼儲存成runGUI,存在sub2/ENV/bin/runGUI,以後我只要進入Python虛擬環境然後runGUI xxx.py而不是python xxx.py就可以解決了。

相關文章