Linux 的 Anaconda 3 没有 ensurepip?

Anaconda 3 for Linux Has No ensurepip?

这是我的环境:

我想通过pyvenv创建venv虚拟环境。不幸的是,我收到了这条错误信息:

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

网上查了一下,说是模块ensurepip不见了。我检查了我的 Anaconda 安装路径 /opt/anaconda3/lib/python3.5。没有ensurepip文件夹。

然后,在我的 Windows 10 64 位上,我检查了我的 Anaconda 安装路径 D:\win10\Anaconda3\Lib\。有一个ensurepip文件夹!而且我可以成功运行python -m venv test创建一个venv.

然后,我检查了下载 Anaconda python 档案: D:\win10\Anaconda3\pkgs\python-3.5.2-0.tar.bz2 在 Windows 10 和 /opt/anaconda3/pkgs/python-3.5.2-0.tar.bz2 在 CentOS 7 上。

Windows10 上的一个存档确实有一个 ensurepip 子文件夹。但是 CentOS 7 上的没有!

有人知道这个区别吗?是 Anaconda 的 bug 吗?

是的,Anaconda3/2 Linux 和 Mac OS 没有安装 ensurepip

根据 this issue record,这不是错误,这是 有意 在编译 Anaconda 中的 Python 时 --with-ensurepip=install ]旗帜。

我认为(Continuum Analytics)的基本原理是,在 Anaconda Distribution 中,conda 是管理包和虚拟环境的老板,

pip (and it's setuptools dependency) are installed independent of Python as conda packages.

因此,您可以先 运行 pyvenv test --without-pip 而不是 运行 宁 pyvenv test,然后从 pip's homepage 下载 get-pip.py,然后在 activated test venv.

中安装 pip

就像下面这样:

$ #===== First create the venv without pip, and **activate** it.
$ pyvenv test --without-pip
$ cd test/
$ ls bin/
activate       activate.csh   activate.fish  python@        python3@
$ echo $PATH
Whatever/Else:In/Your/System
$ source bin/activate
(test) $ echo $PATH
/Users/YaOzI/test/bin:Whatever/Else:In/Your/System
(test) $
(test) $ #===== Then install the pip independently.
(test) $ python ~/Downloads/get-pip.py
Collecting pip
  Using cached pip-8.1.2-py2.py3-none-any.whl
Collecting setuptools
  Downloading setuptools-26.0.0-py2.py3-none-any.whl (459kB)
    100% |████████████████████████████████| 460kB 1.3MB/s 
Collecting wheel
  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
    100% |████████████████████████████████| 71kB 5.7MB/s 
Installing collected packages: pip, setuptools, wheel
Successfully installed pip-8.1.2 setuptools-26.0.0 wheel-0.29.0
(test) $ ls bin/
activate   activate.fish     easy_install-3.5*  pip3*  python@   wheel*
activate.csh  easy_install*  pip*     pip3.5*   python3@
(test) $
(test) $ #===== Now you can play around with pip
(test) $ pip list
(test) $