为什么`virtualenv`找不到`pkg_resources`?

时间:2012-05-11 00:57:46

标签: python virtualenv pkg-resources python-wheel

我正在尝试在Ubuntu中使用virtualenv来安装本地虚拟Python环境。当我运行shell命令时:

$ virtualenv ./virt_python

它抛出一个异常,它无法导入pkg_resources。但是当我打开一个Python shell并且from pkg_resources import load_entry_point它运行正常。作为参考,完整的堆栈跟踪如下所示。

$ virtualenv ./virt_python
New python executable in ./virt_python/bin/python
Installing setuptools............done.
Installing pip.......
  Complete output from command /home/rpsharp/local/...hon/bin/easy_install /usr/local/lib/pytho...pport/pip-1.1.tar.gz:
  Traceback (most recent call last):
  File "/home/rpsharp/local/workspace/invest-natcap.invest-3/virt_python/bin/easy_install", line 5, in <module>
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources
----------------------------------------
...Installing pip...done.
Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 9, in <module>
    load_entry_point('virtualenv==1.7.1.2', 'console_scripts', 'virtualenv')()
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 928, in main
    never_download=options.never_download)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 1042, in create_environment
    install_pip(py_executable, search_dirs=search_dirs, never_download=never_download)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 640, in install_pip
    filter_stdout=_filter_setup)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 1006, in call_subprocess
    % (cmd_desc, proc.returncode))
OSError: Command /home/rpsharp/local/...hon/bin/easy_install /usr/local/lib/pytho...pport/pip-1.1.tar.gz failed with error code 1

我尝试了这里提出的解决方案https://stackoverflow.com/a/10538412/42897,但它没有任何效果。

3 个答案:

答案 0 :(得分:12)

我在尝试运行virtualenv时遇到了同样的问题,发现virtualenv安装在/home/{user}/install/lib/python2.7/site-packages中,而python指向/ home / {user / install / bin / virtualenv - 你应该通过运行

来了解这一点
which virtualenv

所以我必须卸载并重新安装virtualenv

pip uninstall virtualenv 
pip install virtualenv

这对我有用。

答案 1 :(得分:1)

问题是最近版本从不下载setuptools(发布)或pip并期望在本地找到它们的轮子。 通常virtualenv说类似

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

并在此之后失败并返回ImportError。这是documented

  

如果找不到令人满意的本地发行版,virtualenv将失败。 Virtualenv永远不会下载包。

您可能想要检查您的环境中是否设置了 VIRTUALENV_EXTRA_SEARCH_DIR 或者virtualenv的config file中的相应选项并禁用此功能。

要找出virtualenv实际搜索包的位置,您可以临时添加/usr/local/lib/python2.6/dist-packages/virtualenv.py或类似import pdb; pdb.set_trace()之类的打印语句。有问题的函数是find_wheels,你看起来像这样:

    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

答案 2 :(得分:0)

  1. 检查virtualenv的当前版本。正如user2676043在同一个线程中所回答的那样,virtualenv安装在/usr/local/lib/python2.7/dist-packages中。因此,请运行以下命令:

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

  2. 它将返回系统上安装的virtualenv版本。

    1. 现在,更改可执行文件。

      $ vim /usr/local/bin/virtualenv

    2. 将版本更改为上面收到的版本。保存文件,它可以顺利运行。