title: Why is `pip3 install numpy` much faster than setting it in `install_requires`?
body: <p>The following takes place in a Python 3 virtual environment.</p>
  
  <p>I just authored a little package that requires <code>numpy</code>. So, in <code>setup.py</code>, I wrote <code>install_requires=['numpy']</code>. I ran <code>python3 setup.py install</code>, and it took something like two minutes -- I got the full screen dump of logs, warnings, and configurations that normally comes with a numpy installation.</p>
  
  <p>Then, I created a new virtual environment, and this time simply wrote <code>pip3 install numpy</code> -- which took only a few seconds -- and then ran <code>python3 setup.py install</code>, and I was done almost immediately.</p>
  
  <p>What's the difference between the two, and why was <code>pip3 install numpy</code> so much faster? Should I thus include a <code>requirements.txt</code> just so people can pip-install the requirements rather than using setuptools?</p>
  
  <hr>
  
  <p>Note that when I wrote <code>pip3 install numpy</code>, I got the following:</p>
  
  <pre><code>Collecting numpy
    Using cached numpy-1.12.0-cp36-cp36m-manylinux1_x86_64.whl
  Installing collected packages: numpy
  Successfully installed numpy-1.12.0
  </code></pre>
  
  <p>Is it possible that this was so much faster because the numpy wheel was already cached?</p>