Что нужно для успешного запуска wxPython? - PullRequest
7 голосов
/ 22 декабря 2019

Я пытаюсь заставить wxPython работать на основе pyenv virtualenv с плагинами virtualenv и virtualenvwrapper на MacOS. Я прочитал несколько вопросов о том, как сделать эту работу, но большинство ответов, похоже, предполагают, что я использую системную версию Python и / или затрагиваю только один аспект неработающей установки. Я еще не видел ничего, что объясняет, что wxPython проверяет при запуске.

У меня есть python 3.7, скомпилированный pyenv с --enable-framework.

env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.7.4

pyenv сам установлен в моем homedir из сравнительно недавнего (в течение последних нескольких недель) запроса от git.

Чтобы было понятно, ни один из инструментов или библиотекв моем Python набор инструментов установлен Homebrew.

Мой virtualenv имеет доступ к фреймворку благодаря --system-site-packages. Предполагается, что доступ к фреймворку и к дисплею - это все, что требуется для работы wxPython, но при запуске любого тестового приложения по-прежнему возникает та же ошибка:

Эта программа нуждается в доступе кэкран. Пожалуйста, запустите со сборкой Python для Framework, и только когда вы вошли в систему на главном экране вашего Mac.

Мне кажется, что все, что мне нужно, доступно.

% pyenv which python3.7
/Users/matt/.pyenv/versions/3.7.4/bin/python3.7

% mkvirtualenv --system-site-packages --python python3.7 wxtest
Running virtualenv with interpreter /Users/matt/.pyenv/shims/python3.7
Already using interpreter /Users/matt/.pyenv/versions/3.7.4/Python.framework/Versions/3.7/bin/python3.7
Using base prefix '/Users/matt/.pyenv/versions/3.7.4/Python.framework/Versions/3.7'
New python executable in /Users/matt/.ve/wxtest/bin/python3.7
Also creating executable in /Users/matt/.ve/wxtest/bin/python
Installing setuptools, pip, wheel...
done.
virtualenvwrapper.user_scripts creating /Users/matt/.ve/wxtest/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/matt/.ve/wxtest/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/matt/.ve/wxtest/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/matt/.ve/wxtest/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/matt/.ve/wxtest/bin/get_env_details

% python -m site
sys.path = [
    '/Users/matt/devel/wxtest',
    '/Users/matt/.ve/wxtest/lib/python37.zip',
    '/Users/matt/.ve/wxtest/lib/python3.7',
    '/Users/matt/.ve/wxtest/lib/python3.7/lib-dynload',
    '/Users/matt/.pyenv/versions/3.7.4/Python.framework/Versions/3.7/lib/python3.7',
    '/Users/matt/.ve/wxtest/lib/python3.7/site-packages',
    '/Users/matt/.pyenv/versions/3.7.4/Python.framework/Versions/3.7/lib/python3.7/site-packages',
]
USER_BASE: '/Users/matt/.local' (exists)
USER_SITE: '/Users/matt/.local/lib/python3.7/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

% pip install wxPython
Collecting wxPython
[...]
Successfully installed numpy-1.18.0 pillow-6.2.1 six-1.13.0 wxPython-4.0.7.post2

Код IsDisplayAvailable() находится в библиотеке общих объектов _core, поэтому его не так просто исследовать. Я не программист на C ++, и все, что мне удалось найти, - копаться в репозитории кода - это строка документации в src/_app.i, а не сам код.

  • В Mac OS X возвращаемое значение False будет означать, что wx не может получить доступ к диспетчеру окон, что может произойти, если войти в систему удаленно или при запуске из обычной версииpython вместо версии фреймворка (то есть pythonw.)

Этот список требований, кажется, удовлетворяется тем, что у меня здесь. У меня нет pythonw бинарного файла, но, как говорится на справочной странице pythonw(1):

На самом деле, начиная с Python 2.5, нормальный python также разрешает доступ к GUI, так что python и pythonw теперьвзаимозаменяемы.

Есть ли у кого-нибудь исчерпывающий список того, что wxPython действительно ожидает найти до запуска?

...