设置虚拟环境:没有名为 'pip' 的模块。

41

我在一台运行Windows Server 2008 R2的机器上进行了Python 3.3.4的全新安装。我已经全局成功安装了最新版本的Setuptools、Pip和Virtualenv:

python ez_setup.py
easy_install pip
pip install virtualenv

现在,当我尝试使用virtualenv ENV设置虚拟环境时,我会得到以下堆栈跟踪:

New python executable in ENV\Scripts\python.exe
Installing setuptools, pip...
  Complete output from command [path redacted]\ENV\Scripts\python.exe -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip:
  Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named 'pip'
----------------------------------------
...Installing setuptools, pip...done.
Traceback (most recent call last):
  File "C:\Python33\lib\runpy.py", line 160, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "C:\Python33\lib\runpy.py", line 73, in _run_code
    exec(code, run_globals)
  File "C:\Python33\Scripts\virtualenv.exe\__main__.py", line 9, in <module>
  File "C:\Python33\lib\site-packages\virtualenv.py", line 824, in main
    symlink=options.symlink)
  File "C:\Python33\lib\site-packages\virtualenv.py", line 992, in create_environment
    install_wheel(to_install, py_executable, search_dirs)
  File "C:\Python33\lib\site-packages\virtualenv.py", line 960, in install_wheel
    'PIP_NO_INDEX': '1'
  File "C:\Python33\lib\site-packages\virtualenv.py", line 902, in call_subprocess
    % (cmd_desc, proc.returncode))
OSError: Command [path redacted]\ENV\Scripts\python.exe -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip failed with error code 1

我以前从未见过这个错误,而且堆栈跟踪对我来说毫无意义。我可以在Python shell中成功地 import pip。有人能帮我修复这个问题吗?

更新 当我提供--system-site-packages标志时,env成功安装。


确保pip.exe所在的路径已添加到系统环境变量Path中。 - Priyank Patel
1
@PriyankPatel pip 肯定在路径上;我可以使用 where pip 找到它并使用 pip 运行它。 - Benjamin Hodgson
7个回答

34

以下是针对Python bug问题的有用解决方法,供其他遇到相似问题的人参考:

  • 运行virtualenv venv --no-setuptools
  • 激活此虚拟环境 (venv\Scripts\activate)
  • 下载并运行get-pip.py来手动安装pip和setuptools到该虚拟环境中
  • 然后正常操作即可

或者降级至3.3.3版。这个问题应该在3.3.5版本中得到了修复。


1
它在3.3.5中没有被修复。我使用的是3.10版本。 - Berry Tsakala
1
@naaman 我编辑了答案并添加了新链接,以免下一个人在阅读您的评论之前尝试访问它而遇到麻烦。对您的评论点赞。也不必使用 --no-setuptools - 只需运行该链接即可。虽然不是很安全.. - Steve

34
在我的情况下,仅运行以下命令即可解决问题;但是,此命令会导致pip回滚到先前的版本。
python -m ensurepip --default-pip

1
在使用了 pip install --upgrade pip 命令之后,我遇到了同样的问题,出现了 Access denied 错误,这是因为我的 pip 已经无法正常工作了。但是这个解决方案确实解决了这个问题。谢谢。 - Qasim
使用pip install --upgrade pip将pip升级到23.1.2后,我在虚拟环境中遇到了“没有名为'pip'的模块”的错误。通过这个解决方案,我将pip版本降级回21.2.3,问题得到了解决。 - Roshinie Jayasundara
@RoshinieJayasundara,我认为你可以像往常一样使用“pip install --upgrade pip”命令更新pip。 - Mukibul Hasan

7

3
我在 Python 3.10 中看到了这个问题,因此它没有被修复。我通过下载 get-pip 来解决它。 - Berry Tsakala

7

我使用deactivate命令取消激活虚拟环境,然后手动删除虚拟环境文件夹,并使用命令python -m venv ./venv重新创建它。这解决了我的问题。然而,这将明显删除您作为虚拟环境的一部分安装的所有软件包和模块 - 但如果pip丢失,您可能没有安装许多软件包。


这在Ubuntu和Python 3.10.6上运行成功。 - embe
我在意识到pip未安装之前已经设置好了我的venv,然后在venv中遇到了“没有名为'pip'的模块”的问题。解决方法是,在执行apt install python3-pip之后,删除venv并按照描述重新构建它。 - DriveItLikeYouStoleIt

5
我知道你的问题底部用粗体字写着“更新”,但我和我的同事都错过了你自己回答了问题这一点。
因此,为了避免其他人也会忽略它,请尝试使用--system-site-packages标志。这对我们很有效: virtualenv ENV --system-site-packages

1
在虚拟环境中运行 python3 -m ensurepip --upgrade 对我有用。

1
在Linux或macOS上 ``` python -m ensurepip --upgrade ```
使用Python 3 ``` python3 -m ensurepip --upgrade ```
在Windows上 ``` py -m ensurepip --upgrade ```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接