title: import error: 'No module named' *does* exist
body: <p>I am getting this stack trace when I start pyramid pserve:</p>
  
  <pre class="lang-none prettyprint-override"><code>% python $(which pserve) ../etc/development.ini
  Traceback (most recent call last):
    File "/home/hughdbrown/.local/bin/pserve", line 9, in &lt;module&gt;
      load_entry_point('pyramid==1.5', 'console_scripts', 'pserve')()
    File "/home/hughdbrown/.virtualenvs/ponder/local/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/scripts/pserve.py", line 51, in main
      return command.run()
    File "/home/hughdbrown/.virtualenvs/ponder/local/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/scripts/pserve.py", line 316, in run
      global_conf=vars)
    File "/home/hughdbrown/.virtualenvs/ponder/local/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/scripts/pserve.py", line 340, in loadapp
      return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
    File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 247, in loadapp
      return loadobj(APP, uri, name=name, **kw)
    File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 271, in loadobj
      global_conf=global_conf)
    File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 296, in loadcontext
      global_conf=global_conf)
    File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 320, in _loadconfig
      return loader.get_context(object_type, name, global_conf)
    File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 454, in get_context
      section)
    File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 476, in _context_from_use
      object_type, name=use, global_conf=global_conf)
    File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 406, in get_context
      global_conf=global_conf)
    File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 296, in loadcontext
      global_conf=global_conf)
    File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 337, in _loadfunc
      return loader.get_context(object_type, name, global_conf)
    File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 681, in get_context
      obj = lookup_object(self.spec)
    File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/util.py", line 68, in lookup_object
      module = __import__(parts)
    File "/home/hughdbrown/.virtualenvs/ponder/local/lib/python2.7/site-packages/ponder-0.0.40-py2.7.egg/ponder/server/__init__.py", line 10, in &lt;module&gt;
      from ponder.server.views import Endpoints, route
  ImportError: No module named views
  </code></pre>
  
  <p>This works fine from a python REPL:</p>
  
  <pre class="lang-none prettyprint-override"><code>% python
  Python 2.7.5+ (default, Feb 27 2014, 19:37:08) 
  [GCC 4.8.1] on linux2
  Type "help", "copyright", "credits" or "license" for more information.
  &gt;&gt;&gt; from ponder.server.views import Endpoints, route
  &gt;&gt;&gt; 
  </code></pre>
  
  <p>and from a command line import:</p>
  
  <pre class="lang-none prettyprint-override"><code>% python -c "from ponder.server.views import Endpoints, route"
  </code></pre>
  
  <p>An abridged <code>tree</code> output shows what I am working with:</p>
  
  <pre class="lang-none prettyprint-override"><code>% tree
  ├── __init__.py
  ├── ponder
  │   ├── __init__.py
  │   ├── server
  │   │   ├── __init__.py
  │   │   └── views
  │   │       ├── environment_templates.py
  │   │       ├── groups.py
  │   │       ├── __init__.py
  │   │       ├── instances.py
  │   │       ├── tasks.py
  │   │       └── users.py
  </code></pre>
  
  <p>My <code>PYTHONPATH</code> is set to the root of this tree:</p>
  
  <pre class="lang-none prettyprint-override"><code>% echo $PYTHONPATH
  /home/hughdbrown/workspace/ept/ponder/lib
  </code></pre>
  
  <p>I am running this in a virtualenv that uses python 2.7. I have had this working off and on today but I can't figure out where the problem is. For one thing, the <code>__init__.py</code> seems to be okay with <em>some</em> imports that come just before:</p>
  
  <pre><code>from .database import get_db
  from .config import parser
  from .views import Endpoints, route
  </code></pre>
  
  <p>(I changed the last line to an absolute import. No luck.)</p>
  
  <p>Things that I have tried:</p>
  
  <ol>
  <li><p>Rebuilding virtualenv</p></li>
  <li><p>Setting <code>PYTHONPATH</code></p></li>
  <li><p>Using absolute paths in code</p></li>
  <li><p><a href="https://stackoverflow.com/questions/2406007/detecting-circular-imports">Looking for circular imports</a></p></li>
  </ol>
  
  <p>I am open to further suggestions in how to debug this error.</p>
  
  <hr>
  
  <p>So the mistake I made was to look only at the source tree. The problem was really in the runtime environment, in my virtualenv. And when I looked there, I found that the desired files were not being installed. The problem, at root, was the <code>setup.py</code>.</p>