【问题标题】:How to install pip for Python 3.6 on Ubuntu 16.10?如何在 Ubuntu 16.10 上为 Python 3.6 安装 pip?
【发布时间】:2017-07-28 11:25:38
【问题描述】:

我想首先指出这个问题可能看起来像重复,但事实并非如此。我在这里看到的所有问题都是关于 Python 3 的 pip 而我说的是 Python 3.6。那时使用的步骤不适用于 Python 3.6。

  1. 我从official docker store 获得了清晰的 Ubuntu 16.10 映像。
  2. 运行apt-get update
  3. 运行apt-get install python3.6
  4. 运行apt-get install python3-pip
  5. 运行pip3 install requests bs4
  6. 运行python3.6 script.py

下面有ModuleNotFoundError

 Traceback (most recent call last):
    File "script.py", line 6, in <module>
     import requests
 ModuleNotFoundError: No module named 'requests'

我在机器上的 Python 和 pip:

python3
python3.5
python3.5m
python3.6
python3m
python3-config
python3.5-config
python3.5m-config
python3.6m
python3m-config  

pip
pip3
pip3.5

【问题讨论】:

标签: python-3.x ubuntu pip installation


【解决方案1】:

至少在 ubuntu 16.10 中,默认的python3python3.5。因此,所有python3-X 软件包都将安装在python3.5 上,而不是python3.6 上。

您可以通过检查pip3的shebang来验证这一点:

$ head -n1 $(which pip3)
#!/usr/bin/python3

幸运的是,python3-pip 包安装的 pip 被安装到“共享”/usr/lib/python3/dist-packages 中,这样 python3.6 也可以利用它。

您可以通过以下方式为 python3.6 安装软件包:

python3.6 -m pip install ...

例如:

$ python3.6 -m pip install requests
$ python3.6 -c 'import requests; print(requests.__file__)'
/usr/local/lib/python3.6/dist-packages/requests/__init__.py

【讨论】:

  • @Anthony Sottile,关于如何使 python 3.6 默认的任何建议?
  • 使 python3.6 成为 pip 的默认值的一种方法是创建一个名为“pip”但本质上执行exec python3.6 -m pip 的可执行文件——将其放入~/bin/usr/local/bin。不建议更换操作系统默认的python3可执行文件,会导致操作系统不稳定。
  • “没有名为 pip 的模块”当我尝试这个时。
  • @TurtlesAreCute 你是否安装了python-pip(通过apt)?
  • @TurtlesAreCute 来自测试,这可能意味着您(在某些时候)运行sudo pip install pip --upgrade,这会将 pip 移动到 py35 dist-packages。您可能可以使用 sudo apt install --reinstall python-pip 找回旧的,或者按照上面 cmets 中的建议将 get-pip.py 与 python3.6 一起使用
【解决方案2】:

假设您有一个运行 Ubuntu 16.04、16.10 或 17.04 的系统,并且您希望 Python 3.6 成为默认 Python。

如果您使用的是 Ubuntu 16.04 LTS,则需要使用 PPA:

sudo add-apt-repository ppa:jonathonf/python-3.6  # (only for 16.04 LTS)

然后,运行以下命令(这在 16.10 和 17.04 上开箱即用):

sudo apt update
sudo apt install python3.6
sudo apt install python3.6-dev
sudo apt install python3.6-venv
wget https://bootstrap.pypa.io/get-pip.py
sudo python3.6 get-pip.py
sudo ln -s /usr/bin/python3.6 /usr/local/bin/python3
sudo ln -s /usr/local/bin/pip /usr/local/bin/pip3

# Do this only if you want python3 to be the default Python
# instead of python2 (may be dangerous, esp. before 2020):
# sudo ln -s /usr/bin/python3.6 /usr/local/bin/python

当您完成以上所有操作后,以下每个 shell 命令都应指明 Python 3.6.1(或 Python 3.6 的更新版本):

python --version   # (this will reflect your choice, see above)
python3 --version
$(head -1 `which pip` | tail -c +3) --version
$(head -1 `which pip3` | tail -c +3) --version

【讨论】:

  • 我认为应该是sudo ln -s /usr/local/bin/pip3.6 /usr/local/bin/pip3,因为pip3默认是系统默认安装的pip3.x。
  • 在我提供的示例中,pip 通过sudo python3.6 get-pip.py 安装为/usr/local/bin/pip,别名为/usr/local/bin/pip3。系统上没有/usr/local/bin/pip3.6
  • 哦,好的。我现在明白了。创建了一个 Ubuntu Server 17.04 用于测试和开箱即用,它仅与 Python 3.5.x 一起提供,与 Python 2.x 无关,也没有安装 pip。在apt install python3.6 / -dev / -env 之后,我得到了 Python 3.6.x,但python3 符号链接继续按预期指向默认的 Python 3.5.x。然后一个简单的sudo ln -s /usr/bin/python3.6 /usr/local/bin/python 处理它。然后 wget get-pip.py 并使用python(符号链接后的Python 3.6.x)运行,就完成了。现在将你的答案标记为正确的答案,因为它感觉比旧的更干净。
  • fwiw,pep 0394 不建议以下内容:sudo ln -s /usr/bin/python3.6 /usr/local/bin/python
  • PEP 394 说“更通用的python 命令应该在安装任何版本的Python 2 时安装,并且应该调用与python2 命令相同的Python 版本”。在 Ubuntu 16 上将 python3.6 链接到 python 可能很危险。
【解决方案3】:

此答案假定您已安装 python3.6。对于python3.7,将3.6 替换为3.7。对于python3.8,将3.6 替换为3.8,但它也可能首先需要python3.8-distutils 包。

使用 sudo 安装

对于installing pip,使用curl(而不是wget)可以避免将文件写入磁盘。

curl https://bootstrap.pypa.io/get-pip.py | sudo -H python3.6

-H 标志显然是sudo 所必需的,以防止在为更新的 python 解释器安装 pip 时出现以下错误:

目录'/home/someuser/.cache/pip/http'或其父目录 不属于当前用户并且缓存已被禁用。 请检查该目录的权限和所有者。如果执行 pip with sudo,你可能需要 sudo 的 -H 标志。

目录 '/home/someuser/.cache/pip' 或其父目录不属于 当前用户和缓存轮已被禁用。检查 该目录的权限和所有者。如果使用 sudo 执行 pip, 您可能需要 sudo 的 -H 标志。

不用 sudo 安装

curl https://bootstrap.pypa.io/get-pip.py | python3.6 - --user

这有时可能会给出警告,例如:

警告:脚本轮安装在“/home/ubuntu/.local/bin”中 这不在PATH上。考虑将此目录添加到 PATH 或者,如果 您更喜欢禁止显示此警告,请使用 --no-warn-script-location。

验证

在此之后,pippip3pip3.6 都可以预期指向同一个目标:

$ (pip -V && pip3 -V && pip3.6 -V) | uniq
pip 18.0 from /usr/local/lib/python3.6/dist-packages (python 3.6)

当然你也可以使用python3.6 -m pip

$ python3.6 -m pip -V
pip 18.0 from /usr/local/lib/python3.6/dist-packages (python 3.6)

【讨论】:

  • 这是在 Ubuntu 16.04 上对我有用的唯一答案。谢谢
【解决方案4】:

该网站包含一个更清洁的解决方案,它也使 pip 保持不变,并且可以轻松地在 3.5 和 3.6 之间切换,然后在 3.7 发布时切换。

http://ubuntuhandbook.org/index.php/2017/07/install-python-3-6-1-in-ubuntu-16-04-lts/

简短的总结:

sudo apt-get install python python-pip python3 python3-pip
sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install python3.6
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2

然后

$ pip -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
$ pip3 -V
pip 8.1.1 from /usr/local/lib/python3.5/dist-packages (python 3.5)

然后选择python 3.6运行

sudo update-alternatives --config python3

并选择“2”。那么

$ pip3 -V
pip 8.1.1 from /usr/local/lib/python3.6/dist-packages (python 3.6)

要更新 pip,请选择所需的版本并

pip3 install --upgrade pip

$ pip3 -V
pip 9.0.1 from /usr/local/lib/python3.6/dist-packages (python 3.6)

在 Ubuntu 16.04 上测试。

【讨论】:

  • 请注意。目前,python 3.6 中的 pip 尚未提供 python 包“apt_pkg”,这意味着某些命令(例如“apt-add-repository”)可能不起作用。
  • 在 Ubuntu 上,Python 3 与操作系统紧密集成,因此不同版本不是替代品,您不应更改符号链接 /usr/bin/python3。所以这很容易引起问题。例如。 your terminal might not open.
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-21
  • 2021-04-15
  • 2019-07-05
  • 2018-09-30
  • 1970-01-01
相关资源
最近更新 更多