6

如果您在使用命令创建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

4 回答 4

16

这是一种与 O/S 完全无关的方法......

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!

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

于 2017-01-02T17:07:14.523 回答
9

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

sudo apt install python3.8-venv
于 2020-08-20T23:33:29.867 回答
0

以下应该修复它

brew update
brew upgrade
brew install zlib
于 2018-12-06T22:19:11.170 回答
0

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

例如,您命名一个文件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 .
于 2021-04-27T14:09:48.453 回答