繁体   English   中英

如何在不导入matplotlib的情况下导入pandas的子模块?

[英]How can I import submodules of pandas without importing matplotlib?

我在网络服务器上使用pandas 0.14.1来处理来自SQL数据库的报告。

我不需要任何绘图工具,但始终导入matplotlib。

如何仅导入我需要执行以下操作的模块?

df = pd.io.sql.frame_query(query, con=conn)
df['colname'].apply(somefunc)
df.set_index('colname')
print df.to_html() 

我经常不得不在我的所有报告生成脚本中添加以下hack:

import os
os.environ['MPLCONFIGDIR'] = '/tmp/'

在我导入大熊猫之前。 我该怎么做才能避免这种情况?

当我省略这个hack时,这是我的webserver错误日志:

File "/var/www/scripts/myscript.py", line 46, in index\n    from pandas.io import sql
File "/usr/lib/python2.7/dist-packages/pandas/__init__.py", line 41, in <module>\n    from pandas.core.api import *
File "/usr/lib/python2.7/dist-packages/pandas/core/api.py", line 9, in <module>\n    from pandas.core.groupby import Grouper
File "/usr/lib/python2.7/dist-packages/pandas/core/groupby.py", line 15, in <module>\n    from pandas.core.frame import DataFrame
File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 38, in <module>\n    from pandas.core.series import Series
File "/usr/lib/python2.7/dist-packages/pandas/core/series.py", line 2524, in <module>\n    import pandas.tools.plotting as _gfx
File "/usr/lib/python2.7/dist-packages/pandas/tools/plotting.py", line 26, in <module>\n    import pandas.tseries.converter as conv
File "/usr/lib/python2.7/dist-packages/pandas/tseries/converter.py", line 7, in <module>\n    import matplotlib.units as units
File "/usr/lib/pymodules/python2.7/matplotlib/__init__.py", line 774, in <module>\n    rcParams = rc_params()
File "/usr/lib/pymodules/python2.7/matplotlib/__init__.py", line 692, in rc_params\n    fname = matplotlib_fname()
File "/usr/lib/pymodules/python2.7/matplotlib/__init__.py", line 604, in matplotlib_fname\n    fname = os.path.join(get_configdir(), 'matplotlibrc')
File "/usr/lib/pymodules/python2.7/matplotlib/__init__.py", line 253, in wrapper\n    ret = func(*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/__init__.py", line 478, in _get_configdir\n    raise RuntimeError("Failed to create %s/.matplotlib; consider setting MPLCONFIGDIR to a writable directory for matplotlib configuration data"%h)
RuntimeError: Failed to create /var/www/.matplotlib; consider setting MPLCONFIGDIR to a writable directory for matplotlib configuration data

更多细节:平台是Ubuntu 12.04LTS,它有一个相当旧版本的matplotlib。 最新版本通过创建临时文件来修复此错误 但是,当我不需要它时,matplotlib在我的网络服务器中运行仍然很糟糕。

不幸的是,答案是将matplotlib升级到在启动时创建可写配置目录的版本(如果默认位置不可用)。 如果你使用你的linux发行包(matplotlib v1.1.1),这很痛苦1.3.1之后的版本应该没问题。

评论中的两个建议都无法解决问题。

更改mpl配置以使用不同的显示驱动程序(如Agg不会阻止matplotlib尝试创建配置目录。

添加一个空的matplotlib.py文件会破坏pandas,因为它需要使用matplotlib.units模块进行数据类型转换。

所以为了避免这种情况,在升级matplotlib之前, os.environ['MPLCONFIGDIR'] = '/tmp/' hack工作正常,但我们必须记住将它放在我们网络服务器上使用pandas的每个文件中。 (或创建我们自己的隐藏所有这些的自定义模块)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM