Каков самый простой способ заставить matplotlib в OSX работать в виртуальной среде?
Я только что обнаружил, что matplotlib
имеет проблемы с виртуальными средами. Я пробовал решения в часто задаваемых вопросах, но они не работали. Идеальное решение должно включать только команды pip
, но было бы сложно или нереалистично просить об этом. Во всяком случае, я попробовал то, что у них было в разделе OS X, чтобы сделать файл framework
bash в вашей папке venv
и запустить через него команду.
$ frameworkpython krls.py
когда я сделал это, я получил ошибку deniel разрешения:
Permission denied
Я как бы испугался команд sudoing, что я не на 100%, что они делают... во всяком случае, казалось, что bash script не делает ничего слишком опасного, поэтому я пошел вперед и судировал его, Однако ответ моего терминала был странным, он сказал:
sudo frameworkpython krsl.py
sudo: frameworkpython: command not found
что означает, что он не распознает frameworkpython
как команду. Без sudo он говорит:
frameworkpython krsl.py
- bash:/Пользователи/my_name/path/venv/bin/frameworkpython: Permission denied
который, по-видимому, распознает frameworkpython как команду (?), но не выполнил ее из-за разрешений? Мне это кажется странным. Любые идеи?
Я также пробовал:
$ pip install TKAgg
Collecting TKAgg
Could not find a version that satisfies the requirement TKAgg (from versions: )
No matching distribution found for TKAgg
но это не сработало.
Итак, я попробовал следующий параметр, который использует PySide, который также не работал, и дал гигантский вывод ошибки:
$ pip install pyside
Collecting pyside
Using cached PySide-1.2.4.tar.gz
Building wheels for collected packages: pyside
Running setup.py bdist_wheel for pyside ... error
Complete output from command /Users/my_name/path/venv/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/private/var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-build-_yzDki/pyside/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/tmpUR9qFCpip-wheel- --python-tag cp27:
Removing /private/var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-build-_yzDki/pyside/pyside_package
running bdist_wheel
running build
Python architecture is 64bit
error: Failed to find cmake. Please specify the path to cmake with --cmake parameter.
----------------------------------------
Failed building wheel for pyside
Running setup.py clean for pyside
Failed to build pyside
Installing collected packages: pyside
Running setup.py install for pyside ... error
Complete output from command /Users/my_name/path/venv/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/private/var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-build-_yzDki/pyside/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-UVA_F4-record/install-record.txt --single-version-externally-managed --compile --install-headers /Users/my_name/path/venv/bin/../include/site/python2.7/pyside:
Removing /private/var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-build-_yzDki/pyside/pyside_package
running install
running build
Python architecture is 64bit
error: Failed to find cmake. Please specify the path to cmake with --cmake parameter.
----------------------------------------
Command "/Users/my_name/path/venv/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/private/var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-build-_yzDki/pyside/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-UVA_F4-record/install-record.txt --single-version-externally-managed --compile --install-headers /Users/my_name/path/venv/bin/../include/site/python2.7/pyside" failed with error code 1 in /private/var/folders/nr/rxlk6w192hx8r74813yg6r500000gn/T/pip-build-_yzDki/pyside/
После этого я попробовал следующую опцию, используя WX Phonix. К сожалению, я прошел через их сайт и не смог найти, как это сделать.
Ответы
Ответ 1
Update:
С Python3 вы можете использовать встроенную реализацию virtualenv
через -m venv
:
python -m venv <name of virtualenv>
source <name of virtualenv>/bin/activate
Встроенная реализация Python3 создает виртуальный файл, так что Python настроен как фреймворк, поэтому нет необходимости настраивать что-либо, чтобы заставить его работать. Подробнее здесь.
Исходный ответ:
Как указано в часто задаваемых вами вопросах, вам нужно будет создать сценарии frameworkpython
в venv/bin
. Похоже, ваша система не может найти frameworkpython
, поэтому она не находится в ваших системах $PATH
или не является исполняемой.
Убедитесь, что исполняемые сценарии выполняются с помощью chmod +x venv/bin/frameworkpython
!
От Документы Linux/Unix (я добавил жирный шрифт):
PATH - это переменная среды в Linux и других Unix-подобных операционных системах, которая сообщает оболочке, какие каталоги будут искать исполняемые файлы.
В вашей системе только найдите файлы исполняемые, доступные через переменную среды PATH
, пропуская неиспользуемые файлы.
Создание frameworkpython
script необходимо, так как matplotlib
требует создания фреймворка python. По ссылке выше:
К сожалению, virtualenv создает сборку non framework, даже если она создана из сборки фреймворка Python.
Вот еще сообщение с более подробной информацией о структуре сборки
Ответ 2
Как и ваша настройка, я использую matplotlib
из виртуальной среды на OSX.
Я вижу, что вы потратили немало усилий на то, чтобы добиться успеха, и я не уверен, действительно ли это решит вашу проблему, так как никакие две настройки не совпадают. Однако я отказываюсь от своей конфигурации, чтобы вы могли сравнить и, возможно, найти что-то, что поможет вам решить эту проблему.
Отказ от ответственности: я использую virtualenvwrapper
и храню свои вены под ~/.virtualenvs/
.
-
Скопируйте файл frameworkpython
в ~/.virtualenvs/YOUR_VENV/bin
-
Убедитесь, что измените переменную PATHTOPYTHON
в frameworkpython
bash script, чтобы обратиться к правильному местоположению. Для моей настройки я изменил ее на /usr/bin/
(в то время как исходная настройка была /usr/local/bin
)
-
Установить исполняемый флаг chmod +x frameworkpython
-
Установить libs с помощью pip
, как обычно, после переключения в виртуальную среду с помощью virtualenvwrapper: workon YOUR_VENV
Sourcing frameworkpython
как обычный пользователь (нет root, pls!) и импортирует matplotlib
дает:
$ ./frameworkpython
Python 2.7.0 (default, Oct 23 2015, 19:19:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib as mpl
>>> mpl.__version__
'1.5.1'
>>> import matplotlib.pyplot as plt
>>> ^D
Ответ 3
Расширение предложений @Gator_Python и @juanpa.arrivillaga, я рекомендую установить последнюю версию anaconda. Это кросс-платформенный диспетчер пакетов, который также обрабатывает виртуальные среды. Он также устанавливает большие пакеты, такие как numpy
, pandas
и matplotlib
с небольшой головной болью.
Настройка. Из командной строки просто создайте виртуальную среду и установите ее там. Ниже приведен пример настройки conda (замените соответствующее имя среды и номер версии python соответственно):
conda update conda
conda update anaconda
conda create -n <envname> python=<version> matplotlib
source activate <envname>
conda info --envs # show current env
conda list # see installed env packages
Это должно помещать вас в изолированную, чистую среду. Вы можете увидеть минимальный список пакетов, установленных в этой среде. Убедитесь, что указаны pip
и setuptools
(они установлены автоматически). Для любых других пакетов, которые вам нужны, используйте либо conda install <package>
, либо pip install <package>
в этом порядке. Установите проект:
cd <path\to\project>
python setup.py develop
Удаление. Когда вы будете готовы удалить свою среду:
source deactivate
conda env remove -n <envname>
Примечание: альтернативы setup.py develop
:
Ответ 4
Чтобы заставить pyside работать:
brew install cmake
brew - довольно стандартная зависимость OSX.
Вы правы в определении того, что это проблема с каркасом
Различия между Framework и не-Framework-сборками Python для Mac OS X Чтобы запустить эту программу, вам понадобится запустить python framework.
И еще более корректно в не запущенных командах sudo без их понимания. Почему вы, возможно, сможете это увидеть, но не сможете запустить его, может быть из-за того, что среда не установлена правильно как sudo. Как сохранить переменные среды при использовании SUDO
если вы запустите which frameworkpython
, он должен показать вам путь к исполняемому файлу в файловой системе. Я бы проверял права доступа к файлу в этом файле, в частности, проверить право собственности.
ls -l $(which frameworkpython)
Ouptut which frameworkpython
должен быть путём, который может быть запущен с помощью root, но я бы избегал этого, так как любые другие зависимости могут быть неправильно загружены или могут иметь неправильные разрешения, это может работать сейчас, но в дальнейшем вы столкнетесь с проблемой.
/path/to/frameworkpython krls.py
Когда я столкнулся с этой проблемой, этот блог был потрясающим ресурсом.
Ответ 5
sudo apt-get install tk-dev libpng-dev libffi-dev dvipng texlive-latex-base
Затем удалите и заново установите matplotlib:
pip uninstall matplotlib
pip install matplotlib
Ответ 6
Чтобы ответить на вопрос Педро Каттори, самый простой способ, который работал каждый раз для меня, - просто использовать python 3 с виртуальным env, как в:
python -m venv my-virtualenv
source my-virtualenv/bin/activate
или
python3 -m venv my-virtualenv
source my-virtualenv/bin/activate
из оригинальной страницы часто задаваемых вопросов: http://matplotlib.org/faq/osx_framework.html#osxframework-faq
Все, что я пробовал, привело к смешному количеству кода и времени, потраченному на выяснение того, что случилось. С этим он всегда работает каждый раз, если я не буду делать намного больше, чем pip, устанавливающий matplotlib.