pythondjangovirtualenvsetuptoolspip

No module named pkg_resources


I'm deploying a Django app to a dev server and am hitting this error when I run pip install -r requirements.txt:

Traceback (most recent call last):
  File "/var/www/mydir/virtualenvs/dev/bin/pip", line 5, in <module>
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

pkg_resources appears to be distributed with setuptools. Initially I thought this might not be installed to the Python in the virtualenv, so I installed setuptools 2.6 (same version as Python) to the Python site-packages in the virtualenv with the following command:

sh setuptools-0.6c11-py2.6.egg --install-dir /var/www/mydir/virtualenvs/dev/lib/python2.6/site-packages

EDIT: This only happens inside the virtualenv. If I open a console outside the virtualenv then pkg_resources is present, but I am still getting the same error.

Any ideas as to why pkg_resources is not on the path?


Solution

  • July 2018 Update

    Most people should now use pip install setuptools (possibly with sudo).

    Some may need to (re)install the python-setuptools package via their package manager (apt-get install, yum install, etc.).

    This issue can be highly dependent on your OS and dev environment. See the legacy/other answers below if the above isn't working for you.

    Explanation

    This error message is caused by a missing/broken Python setuptools package. Per Matt M.'s comment and setuptools issue #581, the bootstrap script referred to below is no longer the recommended installation method.

    The bootstrap script instructions will remain below, in case it's still helpful to anyone.

    Legacy Answer

    I encountered the same ImportError today while trying to use pip. Somehow the setuptools package had been deleted in my Python environment.

    To fix the issue, run the setup script for setuptools:

    wget https://bootstrap.pypa.io/ez_setup.py -O - | python
    

    (or if you don't have wget installed (e.g. OS X), try

    curl https://bootstrap.pypa.io/ez_setup.py | python
    

    possibly with sudo prepended.)

    If you have any version of distribute, or any setuptools below 0.6, you will have to uninstall it first.*

    See Installation Instructions for further details.


    * If you already have a working distribute, upgrading it to the "compatibility wrapper" that switches you over to setuptools is easier. But if things are already broken, don't try that.