在OSX中使matplotlib在虚拟环境中工作的最简单方法是什么?

时间:2016-06-29 04:34:14

标签: python bash macos matplotlib

我刚刚发现matplotlib存在虚拟环境问题。我尝试了FAQs中的解决方案,但它们没有用。一个理想的解决方案应该只涉及pip命令,但要求它可能是困难的或不现实的。无论如何,我尝试了他们在OS X部分上的内容,在framework文件夹中生成venv bash文件并运行命令。

$ frameworkpython krls.py

当我这样做时,我得到了一个许可否定错误:

Permission denied

我有点害怕发泄命令,我不是100%他们所做的......无论如何,似乎bash脚本没有做任何太危险的事情,所以我继续前进并对它进行了抨击。然而,我的终端的反应很奇怪,它说:

sudo frameworkpython krsl.py
sudo: frameworkpython: command not found

这意味着它不会将frameworkpython识别为命令。没有sudo,它说:

frameworkpython krsl.py -bash:/ Users / 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尝试了下一个选项。不幸的是,我浏览了他们的网站并且无法找到如何做到这一点。

7 个答案:

答案 0 :(得分:10)

<强>更新

使用Python3,您可以通过virtualenv使用-m venv的内置实现:

python -m venv <name of virtualenv>
source <name of virtualenv>/bin/activate

Python3的内置实现构建了virtualenv,使得Python被设置为框架,因此不需要配置任何东西来使其工作。更多详情here

原始答案:

FAQS you reference所述,您需要在frameworkpython中创建venv/bin个脚本。看起来您的系统无法找到frameworkpython,因此它不在您的系统$PATH上,或者不可执行。

确保通过chmod +x venv/bin/frameworkpython将此脚本设为可执行文件!

来自Linux/Unix docs(我添加了粗体):

  

PATH是Linux和其他类Unix操作系统中的环境变量,它告诉shell哪些目录要搜索可执行文件文件。

您的系统查找可通过PATH环境变量访问的可执行文件,跳过非可执行文件。

创建frameworkpython脚本是必要的,因为matplotlib需要python的框架构建。从上面的链接:

  

不幸的是,即使从Python的框架构建中创建,virtualenv也会创建一个非框架构建。

这是另一个post,其中包含有关框架构建的更多详细信息

答案 1 :(得分:4)

如果您使用的是Python 2.x,请在虚拟环境中使用这些命令:

import matplotlib
matplotlib.use(‘TkAgg’)
import matplotlib.pyplot as plt

这使得matplotlib也可以在虚拟环境中工作。

我希望这会有所帮助。

答案 2 :(得分:3)

与您的设置非常相似,我在OSX的虚拟环境中使用matplotlib

我看到你花了很多精力来让事情运转起来,我不确定这是否能真正解决你的问题,因为没有两个设置是相同的。但是,我放弃了我的配置,以便您可以比较并找到可以帮助您解决此问题的内容。

免责声明:我使用virtualenvwrapper并将我的venv存储在~/.virtualenvs/下。

  1. frameworkpython文件复制到~/.virtualenvs/YOUR_VENV/bin

  2. 确保更改PATHTOPYTHON bash脚本中的frameworkpython 变量以引用正确的位置。对于我的设置,我已将其更改为/usr/bin/(原始设置为/usr/local/bin

  3. 设置可执行标记chmod +x frameworkpython

  4. 使用virtualenvwrapper切换到虚拟环境后,照常使用pip安装库:workon YOUR_VENV

  5. 以普通用户(无根,请!)和导入frameworkpython来获取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 :(得分:3)

扩展@ Gator_Python和@ juanpa.arrivillaga的建议,我建议安装最新版本的anaconda。它是一个跨平台,类似pip的包管理器,也可以处理虚拟环境。它还会安装大型软件包,例如numpypandasmatplotlib,但不会头疼。

设置:从命令行,只需创建一个虚拟环境并从那里安装。以下是如何设置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

这应该让您置身于一个孤立,干净的环境中。您可以在此环境中看到安装的最小程序包列表。确保列出pipsetuptools(它们是自动安装的)。对于您需要的任何其他软件包,请按顺序使用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 :(得分:2)

让pyside工作:

brew install cmake

brew是一个非常标准的OSX依赖。

您认为这是一个框架问题是正确的 Differences between Framework and non-Framework builds of Python on Mac OS X要使其运行,您需要运行框架python。

更正确的是没有运行sudo命令而不理解它们。为什么你可以看到它,但无法运行它可能是因为没有像sudo那样正确建立环境。 How to keep Environment Variables when Using SUDO

如果您运行which frameworkpython,它应该显示文件系统上可执行文件的路径。我会检查此文件的文件权限,特别是检查所有权。

ls -l $(which frameworkpython)

which frameworkpython的ouptut应该是可以用root执行的路径,但我会避免它,因为任何其他依赖项可能无法正确加载,或者可能设置了错误的权限,它现在可能会起作用,但以后会让你遇到麻烦。

/path/to/frameworkpython krls.py

当我遇到这个问题时this blog是一个很棒的资源。

答案 5 :(得分:0)

sudo apt-get install tk-dev libpng-dev libffi-dev dvipng texlive-latex-base

然后卸载并重新安装matplotlib:

pip uninstall matplotlib

pip install matplotlib

答案 6 :(得分:0)

回应Pedro Cattori的回答,每次对我来说最简单的方法就是简单地使用python 3和虚拟环境,如下所示:

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之外我没有做更多的事情。