我首先要指出这个问题可能看似重复,但事实并非如此。我在这里看到的所有问题都是关于Python 3的pip,我在谈论Python 3.6。当时使用的步骤不适用于Python 3.6。
apt-get update
apt-get install python3.6
apt-get install python3-pip
pip3 install requests bs4
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
答案 0 :(得分:86)
假设您有一个运行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
答案 1 :(得分:30)
至少在ubuntu 16.10中,默认python3
为python3.5
。因此,所有python3-X
包都将安装用于python3.5而不安装用于python3.6。
您可以通过查看pip3
:
$ head -n1 $(which pip3)
#!/usr/bin/python3
幸运的是,python3-pip
软件包安装的pip已安装到&#34; shared&#34; /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
答案 2 :(得分:10)
此答案假定您已安装python3.6
。对于python3.7
,只需将3.6
替换为3.7
。
关于installing pip
,使用curl
(而不是wget
)可以避免将文件写入磁盘。
curl https://bootstrap.pypa.io/get-pip.py | sudo -H python3.6
如果您希望避免使用sudo
,请参阅链接文档,使用--user
标志在本地进行安装。
-H
显然需要sudo
标志,以便在为更新的python解释器安装pip时防止出现这些错误:
目录&#39; /home/someuser/.cache/pip/http'或其父目录 不属于当前用户,并且已禁用缓存。 请检查该目录的权限和所有者。如果执行 点到sudo,你可能想要sudo&#39; -H flag。
目录 &#39; /home/someuser/.cache/pip'或其父目录不归 当前用户和缓存轮已被禁用。检查 权限和该目录的所有者。如果用sudo执行pip, 你可能想要sudo&#39; -H flag。
在此之后,pip
,pip3
和pip3.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)
答案 3 :(得分:3)
这个网站包含一个更清洁的解决方案,它使得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 run
sudo update-alternatives --config python3
并选择&#39; 2&#39;。然后
$ 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上测试。