diff --git a/doc/source/install.rst b/doc/source/install.rst index 2dfda3be0dcd4..0331e8a47903c 100644 --- a/doc/source/install.rst +++ b/doc/source/install.rst @@ -302,6 +302,8 @@ Optional Dependencies * Google's `python-gflags `__ and `google-api-python-client `__ * Needed for :mod:`~pandas.io.gbq` +* `setuptools `__ + * Needed for :mod:`~pandas.io.gbq` (specifically, it utilizes `pkg_resources`) * `httplib2 `__ * Needed for :mod:`~pandas.io.gbq` * One of the following combinations of libraries is needed to use the diff --git a/pandas/io/gbq.py b/pandas/io/gbq.py index 76848a62d0d5f..abb743d3ba04e 100644 --- a/pandas/io/gbq.py +++ b/pandas/io/gbq.py @@ -6,7 +6,6 @@ import uuid import numpy as np -import pkg_resources from distutils.version import LooseVersion from pandas import compat @@ -20,46 +19,54 @@ _GOOGLE_FLAGS_INSTALLED = False _GOOGLE_FLAGS_VALID_VERSION = False _HTTPLIB2_INSTALLED = False +_SETUPTOOLS_INSTALLED = False if not compat.PY3: - + try: - from apiclient.discovery import build - from apiclient.http import MediaFileUpload - from apiclient.errors import HttpError + import pkg_resources + _SETUPTOOLS_INSTALLED = True + except ImportError: + _SETUPTOOLS_INSTALLED = False + + if _SETUPTOOLS_INSTALLED: + try: + from apiclient.discovery import build + from apiclient.http import MediaFileUpload + from apiclient.errors import HttpError - from oauth2client.client import OAuth2WebServerFlow - from oauth2client.client import AccessTokenRefreshError - from oauth2client.client import flow_from_clientsecrets - from oauth2client.file import Storage - from oauth2client.tools import run - _GOOGLE_API_CLIENT_INSTALLED=True - _GOOGLE_API_CLIENT_VERSION = pkg_resources.get_distribution('google-api-python-client').version + from oauth2client.client import OAuth2WebServerFlow + from oauth2client.client import AccessTokenRefreshError + from oauth2client.client import flow_from_clientsecrets + from oauth2client.file import Storage + from oauth2client.tools import run + _GOOGLE_API_CLIENT_INSTALLED=True + _GOOGLE_API_CLIENT_VERSION = pkg_resources.get_distribution('google-api-python-client').version - if LooseVersion(_GOOGLE_API_CLIENT_VERSION >= '1.2.0'): - _GOOGLE_API_CLIENT_VALID_VERSION = True + if LooseVersion(_GOOGLE_API_CLIENT_VERSION >= '1.2.0'): + _GOOGLE_API_CLIENT_VALID_VERSION = True - except ImportError: - _GOOGLE_API_CLIENT_INSTALLED = False + except ImportError: + _GOOGLE_API_CLIENT_INSTALLED = False - try: - import gflags as flags - _GOOGLE_FLAGS_INSTALLED = True + try: + import gflags as flags + _GOOGLE_FLAGS_INSTALLED = True - _GOOGLE_FLAGS_VERSION = pkg_resources.get_distribution('python-gflags').version + _GOOGLE_FLAGS_VERSION = pkg_resources.get_distribution('python-gflags').version - if LooseVersion(_GOOGLE_FLAGS_VERSION >= '2.0.0'): - _GOOGLE_FLAGS_VALID_VERSION = True + if LooseVersion(_GOOGLE_FLAGS_VERSION >= '2.0.0'): + _GOOGLE_FLAGS_VALID_VERSION = True - except ImportError: - _GOOGLE_FLAGS_INSTALLED = False + except ImportError: + _GOOGLE_FLAGS_INSTALLED = False - try: - import httplib2 - _HTTPLIB2_INSTALLED = True - except ImportError: - _HTTPLIB2_INSTALLED = False + try: + import httplib2 + _HTTPLIB2_INSTALLED = True + except ImportError: + _HTTPLIB2_INSTALLED = False logger = logging.getLogger('pandas.io.gbq') @@ -296,10 +303,14 @@ def _test_imports(): _GOOGLE_FLAGS_INSTALLED _GOOGLE_FLAGS_VALID_VERSION _HTTPLIB2_INSTALLED + _SETUPTOOLS_INSTALLED if compat.PY3: raise NotImplementedError("Google's libraries do not support Python 3 yet") + if not _SETUPTOOLS_INSTALLED: + raise ImportError('Could not import pkg_resources (setuptools).') + if not _GOOGLE_API_CLIENT_INSTALLED: raise ImportError('Could not import Google API Client.')