pyvenv возвращает ненулевой статус выхода 1 (во время установки этапа pip)

Если вы когда-нибудь столкнетесь со следующей ошибкой при создании виртуальной среды Python с помощью команды pyvenv:

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 и связанную с ним акробатику.

4 ответа

Решение

Вот простой способ обойти это без прохождения setuptools и связанной с этим акробатики:

user$ pyvenv --without-pip my_venv_dir
user$ source my_venv_dir/bin/activate
user$ curl https://bootstrap.pypa.io/get-pip.py | python
user$ deactivate
user$ source my_venv_dir/bin/activate
(my_venv_dir) user$

Я надеюсь, что это помогает.

2020, на python3.8 на WSL2 (Ubuntu) для меня это решило следующее:

sudo apt install python3.8-venv

Следующее должно это исправить

brew update
brew upgrade
brew install zlib

Если у вас есть модуль, файл которого назван в честь стандартной библиотеки Python, в папке, в которой вы вызываете, то эта команда завершится ошибкой без намека на это.

Например, вы называете файл email.py.

Что я сделал, чтобы найти это, так это написал сценарий bash, который перемещает .py файлы из текущего каталога один за другим (в holdspace/ subdir) и пытайтесь при каждом движении вызывать 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 .
Другие вопросы по тегам