title: How to fix "module 'tensorflow' has no attribute 'estimator' " error
body: <p>I'm using conda (env created via YAML) + pip to set up a Tensorflow v1.13.1 environment on my Linux Mint box. After setup, whenever I try to import <code>tf.estimator</code> I receive the <code>AttributeError</code> described in the title:</p>
  
  <pre><code>AttributeError: module 'tensorflow' has no attribute 'estimator'
  </code></pre>
  
  <ul>
  <li>I do not have any version of TF installed outside of a conda environment (or on pip).</li>
  <li>I do have another conda environment set up the same way but with Tensorflow 2.0 alpha, which can import <code>tf.estimator</code> just fine.</li>
  <li>I have tried removing the environment and building it again</li>
  <li>I have tried rebooting :(</li>
  <li>For some reason I cannot update conda to 4.6:</li>
  </ul>
  
  <pre><code>$ conda update -n base -c defaults conda
  
  # &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; ERROR REPORT &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
  
      Traceback (most recent call last):
        File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/exceptions.py", line 819, in __call__
          return func(*args, **kwargs)
        File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/main.py", line 78, in _main
          exit_code = do_call(args, p)
        File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/conda_argparse.py", line 77, in do_call
          exit_code = getattr(module, func_name)(args, parser)
        File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/main_update.py", line 14, in execute
          install(args, parser, 'update')
        File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/install.py", line 253, in install
          handle_txn(unlink_link_transaction, prefix, args, newenv)
        File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/install.py", line 282, in handle_txn
          unlink_link_transaction.execute()
        File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/core/link.py", line 223, in execute
          self.verify()
        File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/common/io.py", line 46, in decorated
          return f(*args, **kwds)
        File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/core/link.py", line 200, in verify
          self.prepare()
        File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/core/link.py", line 192, in prepare
          stp.remove_specs, stp.update_specs)
        File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/core/link.py", line 282, in _prepare
          mkdir_p(transaction_context['temp_dir'])
        File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/gateways/disk/__init__.py", line 60, in mkdir_p
          makedirs(path)
        File "/usr/share/anaconda3/lib/python3.7/os.py", line 221, in makedirs
          mkdir(name, mode)
      PermissionError: [Errno 13] Permission denied: '/usr/share/anaconda3/.condatmp'
  </code></pre>
  
  <p>The yml file looks like this:</p>
  
  <pre><code>dependencies:
  - python
  - numpy
  - tensorflow
  - cudatoolkit==9.0
  ...
  </code></pre>
  
  <p>From inside the environment in question:</p>
  
  <ul>
  <li><code>$ conda list tensorflow</code></li>
  </ul>
  
  <pre><code>    # packages in environment at /home/cjs/.conda/envs/my-env:
      # 
      # Name                    Version                   Build  Channel
      tensorflow                1.13.1          mkl_py37h54b294f_0
      tensorflow-base           1.13.1          mkl_py37h7ce6ba3_0
      tensorflow-estimator      1.13.0                     py_0
  </code></pre>
  
  <ul>
  <li><code>$ pip list | grep tensorflow</code></li>
  </ul>
  
  <pre><code>    tensorflow                  1.13.1
      tensorflow-estimator        1.13.0
  </code></pre>
  
  <ul>
  <li><code>$ which pip</code></li>
  </ul>
  
  <pre><code>    /home/cjs/.conda/envs/my-env/bin/pip
  </code></pre>
  
  <ul>
  <li><code>$ conda --version</code></li>
  </ul>
  
  <pre><code>    conda 4.5.11
  </code></pre>
  
  <ul>
  <li><code>$ pip --version</code></li>
  </ul>
  
  <pre><code>    pip 19.0.3 from /home/cjs/.local/lib/python3.7/site-packages/pip (python 3.7)
  </code></pre>
  
  <p>Here is a minimal example of the issue. As you can see, this only occurs where tf.estimator is called, all other Tensorflow attributes act as expected:</p>
  
  <pre><code>Python 3.7.3 (default, Mar 27 2019, 22:11:17)
  [GCC 7.3.0] :: Anaconda, Inc. on linux
  Type "help", "copyright", "credits" or "license" for more information.
  &gt;&gt;&gt; import tensorflow as tf
  &gt;&gt;&gt; tf.__version__
  '1.13.1'
  &gt;&gt;&gt; tf.estimator
  Traceback (most recent call last):
    File "&lt;stdin&gt;", line 1, in &lt;module&gt;
  AttributeError: module 'tensorflow' has no attribute 'estimator'
  &gt;&gt;&gt; tf.estimator.Estimator()
  Traceback (most recent call last):
    File "&lt;stdin&gt;", line 1, in &lt;module&gt;
  AttributeError: module 'tensorflow' has no attribute 'estimator'
  &gt;&gt;&gt; from tensorflow import estimator
  Traceback (most recent call last):
    File "&lt;stdin&gt;", line 1, in &lt;module&gt;
  ImportError: cannot import name 'estimator' from 'tensorflow' (/home/cjs/.conda/envs/my-env/lib/python3.7/site-packages/tensorflow/__init__.py)
  &gt;&gt;&gt; tf.Variable
  &lt;class 'tensorflow.python.ops.variables.VariableV1'&gt;
  &gt;&gt;&gt; tf.keras
  &lt;module 'tensorflow._api.v1.keras' from '/home/cjs/.conda/envs/my-env/lib/python3.7/site-packages/tensorflow/_api/v1/keras/__init__.py'&gt;
  &gt;&gt;&gt; tf.constant
  &lt;function constant_v1 at 0x7fb25ea24950&gt;
  </code></pre>
  
  <hr>
  
  <h2>UPDATE</h2>
  
  <p>As per <a href="https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility__table-toolkit-driver" rel="noreferrer">https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility__table-toolkit-driver</a> I was able to figure out that my nvidia drivers and cudatoolkit versions were out of sync (390.46 vs 9.0).</p>
  
  <p>I have now updated my NVIDIA drivers to v418, and was able to update my conda version to 4.16.14. I updated the environment.yml shown above to <code>cudatoolkit==10.1</code>, but I can't seem to figure out how to actually install that. </p>
  
  <p>My <code>numba -s</code> output includes this section, which makes me think the whole issue from the beginning was that cuda isn't finding my GPU (or can't connect to it?).</p>
  
  <pre><code>__CUDA Information__
  Error: CUDA device intialisation problem. Message:Error at driver init:
  [100] Call to cuInit results in CUDA_ERROR_NO_DEVICE:
  Error class: &lt;class 'numba.cuda.cudadrv.error.CudaSupportError'&gt;
  </code></pre>
  
  <hr>
  
  <h2>(MINOR) UPDATE</h2>
  
  <p>Was able to determine the cause of the numba issue was that I did not reboot since updating the GPU drivers (duh).</p>
  
  <p>Not completely out of the woods on that, though. New issue is the following:</p>
  
  <pre><code>__CUDA Information__
  Found 1 CUDA devices
  id 0          b'Quadro K620'                              [SUPPORTED]
                        compute capability: 5.0
                             pci device id: 0
                                pci bus id: 1
  Summary:
          1/1 devices are supported
  CUDA driver version                 : 10010
  CUDA libraries:
  Finding cublas
          ERROR: can't locate lib
  Finding cusparse
          ERROR: can't locate lib
  Finding cufft
          ERROR: can't locate lib
  Finding curand
          ERROR: can't locate lib
  Finding nvvm
          ERROR: can't locate lib
          finding libdevice for compute_20...     ERROR: can't open libdevice for compute_20
          finding libdevice for compute_30...     ERROR: can't open libdevice for compute_30
          finding libdevice for compute_35...     ERROR: can't open libdevice for compute_35
          finding libdevice for compute_50...     ERROR: can't open libdevice for compute_50
  </code></pre>