Каков самый простой способ заставить 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.