Why can't `virtualenv` find `pkg_resources`?

前端 未结 3 739
南方客
南方客 2021-02-15 02:01

I\'m trying to use virtualenv in Ubuntu to install a local virtual Python environment. When I run the shell command:

$ virtualenv ./virt_python
<
相关标签:
3条回答
  • 2021-02-15 02:34
    1. Check the current version of virtualenv. As answered by user2676043 in the same thread, virtualenv is installed in /usr/local/lib/python2.7/dist-packages. So run the following command:

      $ python /usr/local/lib/python2.7/dist-packages/virtualenv.py --version

    It will return you the version of virtualenv installed on system.

    1. Now, change the executable file.

      $ vim /usr/local/bin/virtualenv

    Change the version to the one received above. Save the file and it works smoothly.

    0 讨论(0)
  • 2021-02-15 02:35

    The problem is that recent versions never download neither setuptools (distribute) nor pip and expect to find their wheels locally. Usually virtualenv says something like

    Cannot find a wheel for setuptools
    Cannot find a wheel for pip
    

    and fails with the ImportError after that. This is documented:

    If no satisfactory local distributions are found, virtualenv will fail. Virtualenv will never download packages.

    You may want to check if you have VIRTUALENV_EXTRA_SEARCH_DIR set in your environment or the corresponding option in virtualenv's config file and disable this.

    To find out where virtualenv actually searches for the packages you can temporarily add either print statements in /usr/local/lib/python2.6/dist-packages/virtualenv.py or somethig like import pdb; pdb.set_trace(). The function in question is find_wheels and you make it look something like this:

    def find_wheels(projects, search_dirs):
        # … skipping docstring and comments
        for project in projects:
            for dirname in search_dirs:
                print '*** search_dir:', dirname
                files = glob.glob(os.path.join(dirname, project + '-*.whl'))
                if files:
                    wheels.append(os.path.abspath(files[0]))
                    break
            else:
                logger.fatal('Cannot find a wheel for %s' % (project,))
    
        return wheels
    
    0 讨论(0)
  • 2021-02-15 02:41

    I had the same problem when trying to run virtualenv, found out the virtualenv was installed in /home/{user}/install/lib/python2.7/site-packages while the python was pointing to /home/{user}/install/bin/virtualenv - you should know this by running

    which virtualenv
    

    So I had to uninstall and reinstall virtualenv

    pip uninstall virtualenv 
    pip install virtualenv
    

    This worked for me.

    0 讨论(0)
提交回复
热议问题