Jak zainstalować pip dla Pythona 3.6 na Ubuntu 16.10?

Chciałbym zacząć od wskazania, że to pytanie może wydawać się duplikatem, ale tak nie jest. wszystkie pytania, które tutaj widziałem, dotyczyły pip dla Pythona 3 i mówię o Pythonie 3.6. Kroki używane w tamtych czasach nie działają w Pythonie 3.6.

  1. otrzymałem czysty obraz Ubuntu 16.10 z oficjalnego sklepu docker .
  2. Run apt-get update
  3. Run apt-get install python3.6
  4. Run apt-get install python3-pip
  5. Run pip3 install requests bs4
  6. Run python3.6 script.py

Got ModuleNotFoundError poniżej:

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

Pythona i Pipa mam w maszynie:

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

pip
pip3
pip3.5
Author: wjandrea, 2017-03-08

4 answers

Załóżmy, że masz system z Ubuntu 16.04, 16.10 lub 17.04 i chcesz, aby Python 3.6 był Pythonem domyślnym.

Jeśli używasz Ubuntu 16.04 LTS, musisz użyć PPA:
sudo add-apt-repository ppa:jonathonf/python-3.6  # (only for 16.04 LTS)

Następnie uruchom następujące (działa to po wyjęciu z pudełka w dniach 16.10 i 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

Po wykonaniu wszystkich powyższych, każde z poniższych poleceń powłoki powinno wskazywać Python 3.6.1 (lub nowszą wersję Pythona 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
 68
Author: Miles Erickson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-14 22:50:37

W ubuntu 16.10 domyślną wartością python3 jest python3.5. W związku z tym wszystkie pakiety python3-X zostaną zainstalowane dla python3.5, a nie dla python3. 6.

Możesz to zweryfikować sprawdzając shebang z pip3:

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

Na szczęście pip zainstalowany przez pakiet python3-pip jest zainstalowany w" shared " /usr/lib/python3/dist-packages tak, że python3.6 może również z niego skorzystać.

Możesz zainstalować pakiety dla python3.6 wykonując:

python3.6 -m pip install ...

Na przykład:

$ python3.6 -m pip install requests
$ python3.6 -c 'import requests; print(requests.__file__)'
/usr/local/lib/python3.6/dist-packages/requests/__init__.py
 22
Author: Anthony Sottile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-08 05:12:01

Ta odpowiedź zakłada, że masz python3.6 zainstalowany. Dla python3.7, wystarczy zastąpić 3.6 przez 3.7.

Instalacja

W odniesieniu do instalacji pip, użycie curl (zamiast wget) unika zapisu pliku na dysk.

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

Jeśli chcesz uniknąć używania sudo, zapoznaj się z dołączoną dokumentacją, aby zainstalować ją lokalnie przy użyciu znacznika --user.

-flaga H

Znacznik -H jest ewidentnie konieczny z sudo, aby zapobiec błędom takie jak te podczas instalacji PIP dla zaktualizowanego interpretera Pythona:

Katalog ' / home / someuser/.cache / pip / http " lub jego katalogu nadrzędnego nie jest własnością bieżącego użytkownika, a pamięć podręczna została wyłączona. Sprawdź uprawnienia i właściciela tego katalogu. Jeżeli wykonanie pip z sudo, możesz chcieć flagi sudo-H.

Katalog '/home / someuser/.cache / pip " lub jego Katalog nadrzędny nie jest własnością bieżący użytkownik i koła buforowania został niepełnosprawni. sprawdź uprawnienia i właściciel tego katalogu. Jeśli wykonujesz pip z sudo, możesz chcieć flagi sudo-H.

Weryfikacja

Po tym, pip, pip3, i pip3.6 można oczekiwać, że wszystkie wskażą ten sam cel:

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

Oczywiście możesz również użyć python3.6 -m pip.

$ python3.6 -m pip -V
pip 18.0 from /usr/local/lib/python3.6/dist-packages (python 3.6)
 9
Author: A-B-B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-23 18:35:24

Ta strona zawiera znacznie czystsze rozwiązanie, pozostawia PIP nienaruszony,jak również i można łatwo przełączać się między 3.5 i 3.6, a następnie za każdym razem, gdy 3.7 jest wydany.

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

Krótkie podsumowanie:

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

Then

$ 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)

Następnie wybierz python 3.6 Uruchom

sudo update-alternatives --config python3

I wybierz "2". Then

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

Aby zaktualizować pip wybierz żądaną wersję i

pip3 install --upgrade pip

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

Sprawdzone na Ubuntu 16.04.

 1
Author: genetica,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-07 11:34:31