🏠 | 💻 IT | Программирование Code | Python |

Python: сложности, нюансы, детали.

Многие сложности возникают у новичков из-за того, что им никто не объяснил про виртуальное окружение .

Вы можете избавить себя от головной боли прочитав статью virtualenv

Содержание статьи
Установлено несколько версий Python
Куда устанавливаются различные версии Python
ModuleNotFoundError: No module named 'urllib2'
TabError: inconsistent use of tabs and spaces in indentation
ModuleNotFoundError: No module named 'requests'
SyntaxError: Missing parentheses in call to 'print'
TypeError: getsockaddrarg: AF_INET address must be tuple, not str
virtualenv : The term 'virtualenv' is not recognized
Не активируется виртуальное окружение
Другие статьи о Python

Установлено несколько версий Python

Итак, Вы установили python, pipe, pipenv, requests и ещё много чего, но вдруг выяснили, что на компьютере уже не одна, а несколько версий python.

Например, у Вас установлены версии 2.7 и 3.5.

Когда Вы запускаете python, то хотите, чтобы работала последняя версия, но, почему-то работает версия 2.7.

Выясним, как разобраться в этой ситуации.

Python -V

Узнаем версию python которая вызывается командой python

python -V

Python 2.7.12

Pip

Первым делом найдём куда смотрит pip

pip -V

/home/andrei/.local/lib/python2.7/site-packages (python 2.7)

Как видите, pip смотрит в директорию python2.7 поэтому всё, что мы до этого устанавливали командой pipe install попало к версии 2.7 а версия 3.5 не имеет ни pipenv ни requests и, например, протестировать интерфейсы с её помощью не получится

Куда устанавливаются различные версии Python

Просмотрите содержимое /usr/local/bin

ls -la /usr/local/bin

Результат на моём ПК показывает, что здесь находится версия 3.5

total 23620 drwxr-xr-x 0 root root 512 Mar 19 18:16 .
drwxr-xr-x 0 root root 512 Mar 30 2017 ..
lrwxrwxrwx 1 root root 8 Mar 19 18:16 2to3 -> 2to3-3.5
-rwxrwxrwx 1 root root 101 Mar 19 18:16 2to3-3.5
lrwxrwxrwx 1 root root 7 Mar 19 18:16 idle3 -> idle3.5
-rwxrwxrwx 1 root root 99 Mar 19 18:16 idle3.5
lrwxrwxrwx 1 root root 8 Mar 19 18:16 pydoc3 -> pydoc3.5
-rwxrwxrwx 1 root root 84 Mar 19 18:16 pydoc3.5
lrwxrwxrwx 1 root root 9 Mar 19 18:16 python3 -> python3.5
-rwxr-xr-x 2 root root 12090016 Mar 19 18:13 python3.5
lrwxrwxrwx 1 root root 17 Mar 19 18:16 python3.5-config -> python3.5m-config
-rwxr-xr-x 2 root root 12090016 Mar 19 18:13 python3.5m
-rwxr-xr-x 1 root root 3071 Mar 19 18:16 python3.5m-config
lrwxrwxrwx 1 root root 16 Mar 19 18:16 python3-config -> python3.5-config
lrwxrwxrwx 1 root root 10 Mar 19 18:16 pyvenv -> pyvenv-3.5
-rwxrwxrwx 1 root root 236 Mar 19 18:16 pyvenv-3.5

Версия 2.7 скорее всего здесь /home/andrei/.local/lib/

ls -la /home/andrei/.local/lib/python2.7/site-packages/

Результат на моём ПК

total 1304
drwx------ 0 andrei andrei 512 Mar 19 13:19 .
drwx------ 0 andrei andrei 512 Mar 19 13:19 ..
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 asn1crypto
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 asn1crypto-0.24.0.dist-info
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 certifi
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 certifi-2018.1.18.dist-info
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 cffi
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 cffi-1.11.5.dist-info
-rwxrwxrwx 1 andrei andrei 783672 Mar 19 13:19 _cffi_backend.so
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 chardet
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 chardet-3.0.4.dist-info
-rw-rw-rw- 1 andrei andrei 10826 Mar 19 13:19 clonevirtualenv.py
-rw-rw-rw- 1 andrei andrei 11094 Mar 19 13:19 clonevirtualenv.pyc
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 cryptography
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 cryptography-2.2.dist-info
-rw-rw-rw- 1 andrei andrei 126 Mar 19 13:19 easy_install.py
-rw-rw-rw- 1 andrei andrei 315 Mar 19 13:19 easy_install.pyc
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 enum
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 enum34-1.1.6.dist-info
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 idna
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 idna-2.6.dist-info
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 ipaddress-1.0.19.dist-info
-rw-rw-rw- 1 andrei andrei 79852 Mar 19 13:19 ipaddress.py
-rw-rw-rw- 1 andrei andrei 75765 Mar 19 13:19 ipaddress.pyc
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 .libs_cffi_backend
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 OpenSSL
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 ordereddict-1.1.dist-info
-rw-rw-rw- 1 andrei andrei 4221 Mar 19 13:19 ordereddict.py
-rw-rw-rw- 1 andrei andrei 4388 Mar 19 13:19 ordereddict.pyc
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 pathlib-1.0.1.dist-info
-rw-rw-rw- 1 andrei andrei 41481 Mar 19 13:19 pathlib.py
-rw-rw-rw- 1 andrei andrei 43650 Mar 19 13:19 pathlib.pyc
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 pip
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 pip-9.0.2.dist-info
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 pipenv
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 pipenv-11.8.2.dist-info
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 pkg_resources
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 pycparser
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 pycparser-2.18.dist-info
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 pyOpenSSL-17.5.0.dist-info
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 requests
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 requests-2.18.4.dist-info
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 setuptools
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 setuptools-39.0.1.dist-info
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 six-1.11.0.dist-info
-rw-rw-rw- 1 andrei andrei 30888 Mar 19 13:19 six.py
-rw-rw-rw- 1 andrei andrei 30210 Mar 19 13:19 six.pyc
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 urllib3
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 urllib3-1.22.dist-info
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 virtualenv-15.1.0.dist-info
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 virtualenv_clone-0.3.0.dist-info
-rw-rw-rw- 1 andrei andrei 99021 Mar 19 13:19 virtualenv.py
-rw-rw-rw- 1 andrei andrei 86676 Mar 19 13:19 virtualenv.pyc
drwxrwxrwx 0 andrei andrei 512 Mar 19 13:19 virtualenv_support

Существует несколько способов обойти эту проблему. Сперва рассмотрим использование команды python3.

python3 -V

Python 3.5.0

Как мы только что смогли убедиться команда python3 использует новую версию python.

Установим pip3

sudo apt install python3-pip

Проверим, что он установился в нужную директорию

pip3 -V

pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

Теперь установим pipenv

pip3 install pipenv

Советую также прочитать статьи pip , sys.path

ModuleNotFoundError: No module named 'urllib2'

Модуль urllib2 был разделён на urllib.request и urllib.error

Поэтому строку

import urllib2

Нужно заменить на

import urllib.request
import urllib.error

TabError: inconsistent use of tabs and spaces in indentation

Эта ошибка обычно вызвана тем, что нажатие TAB не эквивалентно трём пробелам.

Можно попробовать заменить все отступы на пробелы строго соблюдая равенство количества пробелов везде где нужно.

ModuleNotFoundError: No module named 'requests'

Эта ошибка обычно вызвана тем, что модуль requests не установлен, либо установлен, но не для того python, который Вы запустили.

Например, для python2.6 установлен, а для python3 не установлен.

Можно попробовать установить модуль requests. Подробнее про это я писал в статье Тестирование с помощью Python. Потому что столкнулся с этой проблемой впервые именно при тестировании API

Если эта проблема возникла при использованиее PyCharm установите requests для Вашего проекта по следующей инструкции

Установка модуля requests в PyCharm
File - Settings

Установка модуля requests в PyCharm
Project Interpreter
Установка модуля requests в PyCharm
Введите в поиске requests
Установка модуля requests в PyCharm
Нажмите Install
Установка модуля requests в PyCharm
Дождитесь окончания установки

SyntaxError: Missing parentheses in call to 'print'

Эта ошибка обычно появляется когда Вы пробуете в python 3 использовать print без скобок, так как это работало в python 2

print data

В python 3 нужно использовать скобки

print (data)

TypeError: getsockaddrarg: AF_INET address must be tuple, not str

Эта ошибка обычно появляется когда Вы неправильно ставите кавычку, указывая куда нужно подключиться.

Павильный вариант - указать кортеж (tuple), который выглядит следующим образом:

(ip, port), ip обычно в кавычках, порт без

Пример ('10.6.0.100', 10000)

sock.connect(('10.6.0.130' ,9090))

Ошибка возникает если взять в кавычки и ip и порт, тогда вместо кортежа передаётся строка, на что и жалуется интерпретатор.

sock.connect(('10.6.0.130 ,9090'))

Traceback (most recent call last): File "send.py", line 4, in <module> sock.connect(('10.6.0.130,9090')) TypeError: getsockaddrarg: AF_INET address must be tuple, not str

Не выполняется команда virtualenv

Если Вы только что установили virtualenv, но при попытке выполнить

virtualenv new_env

или

venv new_env

Вы получаете что-то в духе:

virtualenv : The term 'virtualenv' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:1 + virtualenv juha_env + ~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (virtualenv:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

Попробуйте

python -m virtualenv new_env

Не активируется виртуальное окружение

Сначала разберём случай в чистом virtualenv потом перейдём к virtualenvwrapper-win

1. virtualenv

Вы под Windows и пытаетесь активировать Ваше виртуальное окружение, которое называется, допустим, test_env командой

test_env\Scripts\activate.bat

И ничего не происходит

Вы пробуете

test_env\Scripts\activate.ps1

И получаете

.\test_env\Scripts\activate.ps1 : File C:\Users\Andrei\virtualenvs\test_env\Scripts\activate.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170. At line:1 char:1 + .\test_env\Scripts\activate.ps1 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess

Нужно зайти в PowerShell в режиме администратора и выполнить

Set-ExecutionPolicy Unrestricted -Force

И выполните ещё раз

test_env\Scripts\activate.ps1

Если Вы не можете запустить PowerShell в режиме администратора. Напримре, если Вы пользуетесь терминалом в Visual Studio Code как я.

Выполните

Set-ExecutionPolicy -Scope CurrentUser Unrestricted -Force

2. virtualenvwrapper-win

Вы установили virtualenvwrapper-win и создали новое окружение

mkvirtualenv testEnv

created virtual environment CPython3.8.2.final.0-32 in 955ms creator CPython3Windows(dest=C:\Users\Andrei\Envs\testEnv, clear=False, global=False) seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=C:\Users\Andrei\AppData\Local\pypa\virtualenv\seed-app-data\v1.0.1) activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

Его видно в списке окружений

lsvirtualenv

dir /b /ad "C:\Users\Andrei\Envs" ============================================================================== testEnv

И workon его видит

workon

Pass a name to activate one of the following virtualenvs: ============================================================================== testEnv

Чтобы активировать его вводим

workon testEnv

И ничего не происходит. Потому что virtalenvwrapper-win не работает с PowerShell.

Придётся использовать обычный command prompt или переходить в подсистему Linux

Статьи о Python
Программирование на Python
Опеределить тип переменной Python
Тестирование с помощью Python
Selenium + Python
DJANGO
Flask
Скрипт для ZPL принтера
Python Sockets
Виртуальное окружение

Если остались вопросы - смело задавайте их в комментариях.

Поиск по сайту
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: