Virtualenv 和 Pip 永远挂起

Posted

技术标签:

【中文标题】Virtualenv 和 Pip 永远挂起【英文标题】:Virtualenv and Pip hanging forever 【发布时间】:2017-02-26 21:00:59 【问题描述】:

我正在运行一个带有 virtualenv 的 django 项目,直到今天下午它都运行良好。我去运行源代码my-env/bin/activate,它似乎激活了(它给了我通常的命令提示符),但是当我尝试python manage.py runserver 它说它找不到django。我运行了一个 python 脚本并尝试导入 django,果然它说没有名为 django 的模块。所以我删除了这个 virtualenv 并创建了一个新的并做了一个pip install -r requirements.txt。就在那时,我注意到 pip 永远挂起,并且在输入 ^C 时,它会给出我在下面提供的很长的回溯。一旦发生这种情况,我再次尝试删除 virtualenv 并重新开始,当我输入 virtualenv new-env 时,它会挂在“正在安装 setuptools、pip、wheel...”,并且在输入 ^C 时也会给出很长的回溯。我查看了所有在线论坛并尝试了一切来解决此问题,但似乎没有任何效果。如果有人对如何解决此问题有任何想法,我将不胜感激。

Installing setuptools, pip, wheel...^CTraceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 11, in <module>
done.
    sys.exit(main())
  File "/usr/local/lib/python2.7/site-packages/virtualenv.py", line 669, in main
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/virtualenv.py", line 2327, in <module>
    raise SystemExit(popen.wait())
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1384, in wait
    main()
  File "/usr/local/lib/python2.7/site-packages/virtualenv.py", line 711, in main
    symlink=options.symlink)
  File "/usr/local/lib/python2.7/site-packages/virtualenv.py", line 944, in create_environment
    download=download,
  File "/usr/local/lib/python2.7/site-packages/virtualenv.py", line 900, in install_wheel
    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=SCRIPT)
  File "/usr/local/lib/python2.7/site-packages/virtualenv.py", line 767, in call_subprocess
    line = stdout.readline()
KeyboardInterrupt
    pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 476, in _eintr_retry_call
    return func(*args)
KeyboardInterrupt

【问题讨论】:

我可以通过使用命令 python3 -m venv new-env 创建一个新的 virtualenv 来解决问题,但 pip 之后仍然挂起。但是,如果我使用 --no-cache-dir,Pip 将起作用。这仍然很不方便,因为我希望能够使用 mkvirtualenv,但这也不起作用。 setting up environment in virtaulenv using python3 stuck on setuptools, pip, wheel的可能重复 【参考方案1】:

可能不是很有帮助,但我遇到了同样的症状,发现使用详细选项很有帮助:

mkvirtualenv new-env -v

输出指向我遇到的代理问题,阻止使用 setuptools,我通过修复代理设置解决了这个问题:

Installing setuptools, pip, wheel...
Collecting setuptools
Retrying (Retry(total=4, connect=None, read=None, redirect=None)) 
after connection broken by 'ProxyError('Cannot connect to proxy.', 
timeout('timed out',))': /devpi/setuptools/

【讨论】:

【参考方案2】:

我在这方面遇到了很多麻烦,我从各种 *** 讨论中尝试过的都没有帮助。我已经完全确定这不是网络问题,实际上我希望从 Ubuntu 16 升级到 18 会神奇地修复它……但它没有。所以我认为我必须真正修复它。

我开始怀疑它与我的用户目录有关,因为当我以 root 用户身份尝试它时它起作用了。此外,我已将整个主目录复制到一个临时磁盘,然后在升级后又回到主硬盘驱动器(因为我想要全新安装 Ubuntu 18 的“最小”选项)。所以我开始怀疑我的主文件夹中的某些东西是有罪的。

使用-vv 选项运行virtualenv 仅表明它正在停止:Collecting setuptools

考虑到许多人建议检查互联网连接,我认为这可能与缓存有关。所以我尝试清空~/.cache 目录:

rm -rf ~/.cache/*

立即挂在另一个终端窗口中的virtualenv 命令继续并在几秒钟内完成。

我不知道在运行一堆应用程序的情况下以这种方式清空缓存是否被认为是勇敢的,但无论如何,它成功了。

更新

@t354 建议只删除~/.cache/pip

rm -rf ~/.cache/pip

我自己没试过,但如果效果也好,那可能比删除~/.cache中的所有内容更安全

【讨论】:

我在使用全核选项之前尝试了rm -rf ~/.cache/pip,这对我来说似乎效果很好。 @t354:这更有意义,而且可能更安全。我会将其添加到答案中。谢谢! 我遇到了类似的问题,缓存中有一个锁定文件似乎导致它挂起。您可以通过在 pip 命令中添加“--log /tmp/pip.log”然后查看日志来看到这一点。我只是破坏了缓存/pip,它也解决了它,但我想你可以简单地删除锁定文件 rm -rf ~/.cache/* 解决了我关于 pip/virtualenv 挂起的所有问题。谢谢!【参考方案3】:

老兄,经过长时间的痛苦,我解决了这个问题。 使用几个选项重新安装以下软件包 pip \ setuptools \wheels。

python -m pip install <package_name> --upgrade --force-reinstall --no-binary <package_name>    

问题可能是由于上述软件包之一的版本不向后兼容。

【讨论】:

以上是关于Virtualenv 和 Pip 永远挂起的主要内容,如果未能解决你的问题,请参考以下文章

virtualenv pip install mysql-python 失败

为啥 pip 冻结列表“pkg-resources==0.0.0”?

为啥 pip 冻结列表“pkg-resources==0.0.0”?

如何重置 virtualenv 和 pip?

apt-get virtualenv 和 pip virtualenv 有啥区别?

django