【问题标题】:pyvenv returns non-zero exit status 1 (during the installation of pip stage)pyvenv 返回非零退出状态 1(在安装 pip 阶段)
【发布时间】:2017-05-16 18:56:48
【问题描述】:

如果您在使用pyvenv 命令创建Python 虚拟环境时遇到以下错误:

user$ pyvenv my_venv_dir
Error: Command '['/home/user/my_venv_dir/bin/python', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1

...那么答案(如下)提供了一种解决它的简单方法,无需诉诸setuptools 及其相关的杂技。

【问题讨论】:

    标签: python pip virtualenv python-venv pyvenv


    【解决方案1】:

    这是一种完全与操作系统无关的方法...

    pyvenvpython 命令本身都包含一个--without-pip 选项,可让您解决此问题;无需诉诸setuptool 或其他令人头疼的问题。记下我下面的inline comments,这是怎么做的,很容易理解:

    user$ pyvenv --without-pip ./pyvenv.d          # Create virtual environment this way;
    user$ python -m venv --without-pip ./pyvenv.d  # --OR-- this newer way. Both work.
    
    user$ source ./pyvenv.d/bin/activate  # Now activate this new virtual environment.
    (pyvenv.d) user$
    
    # Within it, invoke this well-known script to manually install pip(1) into /pyvenv.d:
    (pyvenv.d) user$ curl https://bootstrap.pypa.io/get-pip.py | python
    
    (pyvenv.d) user$ deactivate           # Next, reactivate this virtual environment,
    user$ source ./pyvenv.d/bin/activate  # which will now include the pip(1) command.
    (pyvenv.d) user$
    
    (pyvenv.d) user$ which pip            # Verify that pip(1) is indeed present.
    /path/to/pyvenv.d/bin/pip
    
    (pyvenv.d) user$ pip install --upgrade pip # And finally, upgrade pip(1) itself;
    (pyvenv.d) user$                           # although it will likely be the
                                               # latest version already.
    # And that's it!
    

    我希望这会有所帮助。 \(◠﹏◠)/

    【讨论】:

    • 聚会有点晚了,但非常感谢!这完全解决了我的 venv 问题!
    【解决方案2】:

    如果您在调用python -m venv venv 的文件夹中有一个文件以python 标准库命名的模块,则此命令将失败而没有任何提示。

    例如,您将文件命名为 email.py

    我所做的是编写一个 bash 脚本,该脚本将.py 文件逐个移出当前目录(到holdspace/ 子目录),并尝试在每次移动时调用venv 目录创建.如果python -m venv venv 命令以0 代码退出,那么它是成功的,并且最后移动的文件是罪魁祸首。


    #!/bin/bash
    if [ ! -d ./holdspace ]
    then
      mkdir holdspace/
    fi
    
    for file in *.py
    do
      mv "$file" holdspace/
      python -m venv venv >/dev/null 2>&1
      if [ $? -eq 0 ]
      then
        echo "$file was the culprit."
        rm -rf venv/
        break
      else
        echo "$file isn't the culprit."
      fi
      rm -rf venv/
    done
    
    mv holdspace/*.py .
    

    【讨论】:

      【解决方案3】:

      2020 年,在 WSL2(Ubuntu)上的 python3.8 上,以下为我解决了这个问题:

      sudo apt install python3.8-venv
      

      【讨论】:

        【解决方案4】:

        以下应该解决它

        brew update
        brew upgrade
        brew install zlib
        

        【讨论】:

          猜你喜欢
          • 2014-07-30
          • 1970-01-01
          • 2018-08-05
          • 1970-01-01
          • 2014-01-13
          • 2019-10-02
          • 1970-01-01
          • 2017-12-11
          • 2017-05-20
          相关资源
          最近更新 更多