Я пытаюсь заставить wxPython работать в виртуальной среде на основе pyenv
с плагинами virtualenv
и virtualenvwrapper
в MacOS. Я прочитал несколько вопросов о том, как это сделать, но большинство ответов, похоже, предполагают, что я использую системную версию Python и/или обращаюсь только к одному аспекту неработающей установки. Я еще не видел ничего, что объясняло бы, что проверяет wxPython при запуске.
У меня есть Python 3.7, скомпилированный pyenv с --enable-framework
.
env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.7.4
Сам pyenv
установлен в моем домашнем каталоге из достаточно недавнего (за последние пару недель) извлечения из git.
Чтобы было ясно, Homebrew не устанавливает ни один из инструментов или библиотек в моей цепочке инструментов Python.
Мой 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 также позволяет доступ к графическому интерфейсу, поэтому python и pythonw теперь взаимозаменяемы.
Есть ли у кого-нибудь исчерпывающий список того, что wxPython на самом деле ожидает найти перед запуском?