Virtualenv: необязательно создать ссылку на pythonw в virtualenv для фреймворка, построенного на python на osx

Созданный на 14 мар. 2011  ·  34Комментарии  ·  Источник: pypa/virtualenv

http://groups.google.com/group/python-virtualenv/browse_thread/thread/83fa4a12d22a30c8/744e19c194f1618a?#744e19c194f1618a подробно описывает, как wxpython может быть включен для python на OSX в virtualenvs по аналогии с тем, как он работает в настоящее время для win32 и cygwin. режимы установки.

Предыдущее обсуждение Иэна в этом направлении находится здесь:
http://groups.google.com/group/python-virtualenv/browse_thread/thread/b119a3c26aa49238
и код, который делает это в данный момент, указан здесь:
http://github.com/gldnspud/virtualenv-pythonw-osx/

Можем ли мы внедрить это в основной дистрибутив? Что нужно изменить в подходе?


enhancement

Самый полезный комментарий

Попробуйте изменить бэкэнд matplotlib, чтобы matplotlib работал в виртуальной среде:

Есть (по крайней мере) два решения, которые я использовал, и некоторые дополнительные методы включены ниже. Оба, описанные здесь, должны относиться к одному и тому же с несколько разным подходом:

Если вы уже установили matplotlib с помощью pip в своей виртуальной среде, вы можете ...

_1. Добавьте новый файл matplotlibrc для вашей виртуальной среды_
Например, в вашей виртуальной среде запустите:

$ cd ~/.matplotlib
$ nano matplotlibrc #to create file using nano

Запишите в файл backend: TkAgg и сохраните при выходе. Тебе должно быть хорошо.

_ИЛИ _

_2. Отредактируйте файл matplotlibrc, на который ссылается ваша виртуальная среда_
В вашей виртуальной среде откройте оболочку Python и запустите:

import matplotlib
matplotlib.matplotlib_fname()
'/home/foo/.config/matplotlib/matplotlibrc'

Примечание / обновление: если вы получаете синтаксическую ошибку в своей виртуальной среде, вам может потребоваться просто запустить:

import matplotlib
matplotlib.matplotlib_fname()

Это отображает файл matplotlibrc, на который ссылается пакет matplotlib в вашей виртуальной среде. Следуйте по пути и откройте файл matplotlibrc. Измените тег файла backend чтобы читать backend: TkAgg и save

[ Также - _Третий подход_]
Раньше не пробовал, но согласно документации вы должны иметь возможность определить бэкэнд при импорте matplotlib, если вы не хотите изменять бэкэнд в самом скрипте:

import matplotlib
matplotlib.use('TkAgg')

(см. источники ниже для дальнейшего объяснения и дополнительных методов)

Источники:
[1] http://matplotlib.org/faq/usage_faq.html#what -is-a-backend
[2] http://matplotlib.org/users/customizing.html#customizing -matplotlib
[3] http://stackoverflow.com/questions/4130355/python-matplotlib-framework-under-macosx
[4] http://stackoverflow.com/questions/29433824/unable-to-import-matplotlib-pyplot-as-plt-in-virtualenv

Все 34 Комментарий

обратите внимание, возможно дубликаты # 47 , но проблема там немного более мутная.


Original Comment By: dan mackinlay

+1 по этому поводу.

Что такое каталог ".Python", на который нужно ссылаться?
http://github.com/gldnspud/virtualenv-pythonw-osx/ ? Я не вижу никаких .Python my venv.

Вместо этого я вижу это:

 (py27) $ laf /Users/glind/venvs/py27//include/python2.7
 /Users/glind/venvs/py27//include/python2.7@ -> /usr/local/Cellar/python/2.7.2/include/python2.7
 (py27) $ which python
 /Users/glind/venvs/py27/bin/python

Эта ошибка проявляется по-разному:

http://stackoverflow.com/questions/3692928/why-doesnt-the-save-button-work-on-a-matplotlib-plot
http://code.google.com/p/iterm2/issues/detail?id=1680

Причина, по которой не было .Python заключалась в том, что в моем первоначальном варианте я использовал brew install python . Только brew install python --framework и другие установки Framework получают .Python dynlib.

Исправить это видно? У меня все еще проблема с застенчивыми окнами Matplotlib

Этой проблеме уже 4,5 года, и для ее запуска на Mac OSX требуются уродливые хаки . Мы можем это исправить?

Я поддерживаю это. Я установил python 2.7, а затем создал virtualenv, используя следующие команды:

brew install python --framework
virtualenv env
source env/bin/activate
pip install matplotlib

Но я получаю следующее сообщение, когда пытаюсь импортировать matplotlib.pyplot .

Python 2.7.10 (default, Aug 22 2015, 20:33:39)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.1)] on darwin
>>> import matplotlib.pyplot as plt
...
    from matplotlib.backends import _macosx
RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are Working with Matplotlib in a virtual enviroment see 'Working with Matplotlib in Virtual environments' in the Matplotlib FAQ

Обходной путь, упомянутый @ nils-werner, работает. Но это огромный блокировщик для новичков, которые хотят работать с matplotlib (не только) в блокноте jupyter в virtualenv.

Я написал подробное руководство, как обойти эту проблему, http://blog.rousek.name/2015/11/29/adventure-with-matplotlib-virtualenv-and-macosx/

Ух ....... Я тоже это сделал после обновления до matplotlib 1.5 (которое теперь не может импортировать бэкэнд, как описано выше @stlk). Я использую заваренный питон 3.5.

Проходил введение в визуализацию с использованием главы Python, и я даже не могу начать писать первый пример кода в jupyter, потому что я продолжаю сталкиваться с этой проблемой на Mac ... Я использую системный Python, который поставляется с mac + virtualenv .

+1

+1
О Боже....
выпуск с 2011 года .. до сих пор не исправлен .

В то же время утилита, указанная в этом выпуске (и в FAQ), все еще работала для меня:

$ # install the utility
$ pip install git+https://github.com/gldnspud/virtualenv-pythonw-osx.git
$ # enter the virtualenv with virtualenvwrapper (or manually)
$ workon my-venv
$ # double-check that this is your venv Python binary
$ which python
/Users/macbook/.virtualenvs/my-venv/bin/python
$ # fix it, using magic
$ fix-osx-virtualenv `which python`/../..

Да, это довольно просто, но мне потребовалось время, чтобы разобраться. Я понятия не имею, что это делает, но в результате Matplotlib работает, просто вызывая его с использованием этого двоичного файла venv Python - нет необходимости в функции оболочки оболочки.

Я знаю это решение, но:

  • Вам нужно повторить (и запомнить, как это сделать) для всех ваших виртуальных машин.
  • Это делает невозможным создание определенных внешних модулей или при использовании CFFI или чего-то еще (нужно будет проверить, что именно было)

Это не кажется идеальным решением, но простой обходной путь - использовать virtualenvwrapper, а затем использовать хуки для настройки. Установите virtualenv-pythonw-osx и virtualevnwrapper, отправьте файл virtualenvwrapper.sh для создания сценариев ловушек, затем добавьте следующее в сценарий postactivate :

if [ ! -d $VIRTUAL_ENV/Python.app ]; then
  echo Fixing OSX Python display issues...
  fix-osx-virtualenv $VIRTUAL_ENV
fi

Это автоматически исправит любую виртуальную среду, когда вы активируете их с помощью команды workon

+1

+1

+1

Просто ударьте и эту ошибку. Предлагаемый обходной путь не совсем элегантен. Было бы здорово починить!

Попробуйте изменить бэкэнд matplotlib, чтобы matplotlib работал в виртуальной среде:

Есть (по крайней мере) два решения, которые я использовал, и некоторые дополнительные методы включены ниже. Оба, описанные здесь, должны относиться к одному и тому же с несколько разным подходом:

Если вы уже установили matplotlib с помощью pip в своей виртуальной среде, вы можете ...

_1. Добавьте новый файл matplotlibrc для вашей виртуальной среды_
Например, в вашей виртуальной среде запустите:

$ cd ~/.matplotlib
$ nano matplotlibrc #to create file using nano

Запишите в файл backend: TkAgg и сохраните при выходе. Тебе должно быть хорошо.

_ИЛИ _

_2. Отредактируйте файл matplotlibrc, на который ссылается ваша виртуальная среда_
В вашей виртуальной среде откройте оболочку Python и запустите:

import matplotlib
matplotlib.matplotlib_fname()
'/home/foo/.config/matplotlib/matplotlibrc'

Примечание / обновление: если вы получаете синтаксическую ошибку в своей виртуальной среде, вам может потребоваться просто запустить:

import matplotlib
matplotlib.matplotlib_fname()

Это отображает файл matplotlibrc, на который ссылается пакет matplotlib в вашей виртуальной среде. Следуйте по пути и откройте файл matplotlibrc. Измените тег файла backend чтобы читать backend: TkAgg и save

[ Также - _Третий подход_]
Раньше не пробовал, но согласно документации вы должны иметь возможность определить бэкэнд при импорте matplotlib, если вы не хотите изменять бэкэнд в самом скрипте:

import matplotlib
matplotlib.use('TkAgg')

(см. источники ниже для дальнейшего объяснения и дополнительных методов)

Источники:
[1] http://matplotlib.org/faq/usage_faq.html#what -is-a-backend
[2] http://matplotlib.org/users/customizing.html#customizing -matplotlib
[3] http://stackoverflow.com/questions/4130355/python-matplotlib-framework-under-macosx
[4] http://stackoverflow.com/questions/29433824/unable-to-import-matplotlib-pyplot-as-plt-in-virtualenv

@ wwp3 Отличная

import matplotlib
matplotlib.use('TkAgg')

Работа над улучшением документации Matplotlib для этой проблемы @stlk любые возражения против использования части вашего руководства для исправления проблемы с записной книжкой Jupyter (у нас уже есть терминал python / ipython, покрытый)

@jenshnielsen Не стесняйтесь использовать его, я рад, что он полезен.

+1

Это решено? Если да, может кто-нибудь закрыть вопрос?

Это не

Точно нет. Это хуже, чем когда-либо прежде, так как он вылетает на import . Действия по воспроизведению

virtualenv test
source test/bin/activate
pip install matplotlib
python -c "import matplotlib.pyplot; print 'import succeeded'"

Есть ли PR, который это исправляет? Если да, то проверяли ли люди, столкнувшиеся с проблемой, ее решение и подтверждали ли это? Если нет, кто-нибудь работает над этим? Для любого, кто не может воспроизвести проблему (для чего, как минимум, требуется установка OSX) будет более или менее невозможно разработать исправление, поэтому мы полагаемся на вклад в эту проблему.

@ nils-werner спасибо за четкое описание того, как воспроизвести. Если бы вы могли добавить детали среды (все, что я вижу в потоке, это "OSX", но ничего конкретного о том, все ли это версии, какая версия virtualenv и python и как они были установлены, нужно ли устанавливать некоторые другие вещи, как установите их и т. д.), что тоже будет полезно.

Затем, надеюсь, кто-нибудь, имеющий доступ к подходящей среде, сможет создать PR и сослаться на него здесь. На этом этапе мы можем проверить PR и взять его оттуда.

@pfmoore Я использовал обходной путь в моем предыдущем комментарии , который все еще работает для меня. - Хотя я не уверен, _как_ это работает. Также см. Следующий комментарий @ nils-werner.

(Для записи: OS X 10.11.6, Python 3.5.2, matplotlib-1.5.3.)

@ nils-werner Единственная причина, по которой хуже то, что мы явно проверяем сборку фреймворка перед запуском бэкэнда OSX в Matplotlib https://github.com/matplotlib/matplotlib/blob/master/src/_macosx.m#L3071

Альтернативой является мягкий сбой, когда графический интерфейс работает только частично.

WXPython имеет аналогичную сборку проверки, которая не позволяет вам использовать WXPython из сборки, отличной от фреймворка.

Лучшее решение - использовать venv из стандартной библиотеки, если вы используете python3.
В отличие от virtualenv, который работает правильно.
http://matplotlib.org/devdocs/faq/osx_framework.html#introduction

Хорошо, поэтому я думаю, если никто не работает над PR, решение здесь либо:

  1. Если вы используете Python 3, используйте stdlib venv
  2. В противном случае используйте указанный обходной путь.

Прохладный. Я не уверен, стоит ли оставлять проблему открытой в таком случае - есть четкое решение, и любое исправление кода в любом случае будет новым PR. Предлагаю закрыть вопрос - комментарии?

Есть обновления по этому поводу? Было бы неплохо исправить это, вместо того, чтобы использовать обходные пути.

@ wwp3 Отлично, спасибо! Я успешно исправил это с помощью этой опции:

  1. Добавьте новый файл matplotlibrc для вашей виртуальной среды
    Например, в вашей виртуальной среде запустите:

$ cd ~ / .matplotlib
$ nano matplotlibrc # для создания файла с помощью nano
Запишите backend: TkAgg в файл и сохраните при выходе. Тебе должно быть хорошо.

@stlk, который был полезен, спасибо

Эта проблема была автоматически помечена как устаревшая, поскольку в последнее время не было активности. Он будет закрыт, если больше не будет активности. Просто добавьте комментарий, если хотите, чтобы он оставался открытым. Спасибо за ваш вклад.

Попробуйте изменить бэкэнд matplotlib, чтобы matplotlib работал в виртуальной среде:

Есть (по крайней мере) два решения, которые я использовал, и некоторые дополнительные методы включены ниже. Оба, описанные здесь, должны относиться к одному и тому же с несколько разным подходом:

Если вы уже установили matplotlib с помощью pip в своей виртуальной среде, вы можете ...

_1. Добавьте новый файл matplotlibrc для вашей виртуальной среды_
Например, в вашей виртуальной среде запустите:

$ cd ~/.matplotlib
$ nano matplotlibrc #to create file using nano

Запишите в файл backend: TkAgg и сохраните при выходе. Тебе должно быть хорошо.

_ _ИЛИ __

_2. Отредактируйте файл matplotlibrc, на который ссылается ваша виртуальная среда_
В вашей виртуальной среде откройте оболочку Python и запустите:

import matplotlib
matplotlib.matplotlib_fname()
'/home/foo/.config/matplotlib/matplotlibrc'

Примечание / обновление: если вы получаете синтаксическую ошибку в своей виртуальной среде, вам может потребоваться просто запустить:

import matplotlib
matplotlib.matplotlib_fname()

Это отображает файл matplotlibrc, на который ссылается пакет matplotlib в вашей виртуальной среде. Следуйте по пути и откройте файл matplotlibrc. Измените тег файла backend чтобы читать backend: TkAgg и save

[ Также - _Третий подход_]
Раньше не пробовал, но согласно документации вы должны иметь возможность определить бэкэнд при импорте matplotlib, если вы не хотите изменять бэкэнд в самом скрипте:

import matplotlib
matplotlib.use('TkAgg')

(см. источники ниже для дальнейшего объяснения и дополнительных методов)

Источники:
[1] http://matplotlib.org/faq/usage_faq.html#what -is-a-backend
[2] http://matplotlib.org/users/customizing.html#customizing -matplotlib
[3] http://stackoverflow.com/questions/4130355/python-matplotlib-framework-under-macosx
[4] http://stackoverflow.com/questions/29433824/unable-to-import-matplotlib-pyplot-as-plt-in-virtualenv

Ваше первое решение настолько велико, что решило мою проблему. Спасибо!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги