我刚刚发现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尝试了下一个选项。不幸的是,我浏览了他们的网站并且无法找到如何做到这一点。
答案 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/
下。
将frameworkpython
文件复制到~/.virtualenvs/YOUR_VENV/bin
确保更改PATHTOPYTHON
bash脚本中的frameworkpython
变量以引用正确的位置。对于我的设置,我已将其更改为/usr/bin/
(原始设置为/usr/local/bin
)
设置可执行标记chmod +x frameworkpython
使用virtualenvwrapper切换到虚拟环境后,照常使用pip
安装库:workon YOUR_VENV
以普通用户(无根,请!)和导入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的包管理器,也可以处理虚拟环境。它还会安装大型软件包,例如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 :(得分: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之外我没有做更多的事情。