我一直都可以使用它,包括更新到Catalina之后,我从未需要运行一些愚蠢的
pythonw
而不是
python
,并且所有启用了wx的脚本都能正常运行。
某个时候,我的环境出了问题,我想这可能是因为
pip-tools
开始删除我的软件包而没有任何警告。不确定发生了什么,但已经造成了损害,突然间我看到了臭名昭著的
此程序需要访问屏幕。请使用python的Framework版本,并且只在Mac的主显示器上登录时运行。
我使用
pyenv
管理我的环境,当前的Python环境是
3.4.7
。假设问题中的脚本是
tst.py
,我运行
$ python tst.py
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.
我确保使用 brew 安装了 wxpython。
$ brew info wxpython
wxpython: stable 4.1.1 (bottled)
Python bindings for wxWidgets
https://www.wxpython.org/
/usr/local/Cellar/wxpython/4.1.1 (1,227 files, 91.8MB) *
Poured from bottle on 2021-03-04 at 14:52:18
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/wxpython.rb
License: LGPL-2.0-or-later with WxWindows-exception-3.1
==> Dependencies
Required: freetype ✔, jpeg ✔, libpng ✔, libtiff ✔, numpy ✔, python@3.9 ✔
==> Analytics
install: 643 (30 days), 2,701 (90 days), 12,659 (365 days)
install-on-request: 604 (30 days), 2,523 (90 days), 9,914 (365 days)
build-error: 0 (30 days)
wxPython wiki建议:
原因是因为像PyInstaller这样的第三方工具可能需要使用--enable-framework构建CPython安装。您需要在终端中运行$ env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.x.x。
因此,我从头开始重新安装了3.7.4
。
$ pyenv uninstall 3.7.4
$ env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.7.4
尝试脚本再次运行。
$ python tst.py
2021-03-04 15:14:44.138 Python[18815:404240] ApplePersistenceIgnoreState: Existing state will not be touched. New state will be written to (null)
当然它并没有完全解决它,但至少烦人的错误已经消失了...
which pythonw
(假设您在UNIX上)。如果您得到输出,那么这意味着pythonw二进制文件在您的路径上,因此您可以使用:pythonw myscript.py
。如果您在计算机上安装了Anaconda,则应该可以访问pythonw。 - duhaime