Автор Тема: Python: Виртуальная среда  (Прочитано 126 раз)

Оффлайн Olej

Python: Виртуальная среда
« : Август 26, 2018, 05:39:52 pm »
Мало того, что 10 лет (или около того) существуют параллельные ветки версий Python 2 & 3 синтаксически несовместимые, так ещё и великое множество сторонних пакетов Python (а их стало действительно много и они представляют ценность) имеют свои системы версий, и одни из них годятся с Python 2, другие с Python 3, а третьи - и с тем и с другим.
Очень сложно стало разбираться с этим зоопарком! :-(

Последнее время пошло много публикаций относительно виртуальных сред Python, когда в каждой конкретной среде устанавливается свой набор версий и Python, и всех требуемых для проекта пакетов и модулей. Т.е.: отдельный проект - отдельная виртуальная среда под него!
Похоже, что это решение проблем со зверинцем версий!

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

Оффлайн Olej

Re: Python: Виртуальная среда
« Ответ #1 : Август 26, 2018, 05:41:44 pm »
Последнее время пошло много публикаций относительно виртуальных сред Python, когда в каждой конкретной среде устанавливается свой набор версий и Python, и всех требуемых для проекта пакетов и модулей. Т.е.: отдельный проект - отдельная виртуальная среда под него!

Виртуальная среда Python – Основы
Цитировать
автор Monty Python
Апр 08, 2018
...
Представим следующий сценарий, где у вас есть два проекта: проект А и проект Б, которые оба имеют зависимость от одной и той же библиотеки – проект В. Проблема становится явной, когда мы начинаем запрашивать разные версии проекта В. Может быть так, что проект А запрашивает версию 1.0.0, в то время как проект Б запрашивает более новую версию 2.0.0, к примеру.

А это оригинал предыдущего перевода:
Python Virtual Environments: A Primer
Цитировать
by Real Python

Make use of virtual environments for Python development (глава)
What are Python virtual environments? (глава)
Цитировать

Оффлайн Olej

Re: Python: Виртуальная среда
« Ответ #2 : Август 26, 2018, 05:45:39 pm »
Как я себе создавал виртуальные среду под OpenCV на Armbian + Opi One.
Под Orange Pi On.
Там есть некоторые неожиданности.

Только ключевые моменты:
- установить это пользуясь Pyton 2 у меня так и не получилось ... но это ничего не значит - сбился по дороге на Python 3...
olej@orangepione:~$ sudo python3 -m pip install virtualenv
/usr/bin/python3: No module named pip
- первая неожиданность...
olej@orangepione:~$ aptitude search pip | grep python
p  python-apipkg - namespace control and lazy-import mechanism for Python
p  python-django-pipeline - Asset packaging library for Django
p  python-django-pipeline-doc - Documentation for Django Pipeline library
p  python-jsonpipe - Convert JSON to a UNIX-friendly line-based format
i  python-pip - Python package installer
i A python-pip-whl - Python package installer
v  python2.7-jsonpipe -
p  python3-apipkg - namespace control and lazy-import mechanism for Python 3
p  python3-django-pipeline - Asset packaging library for Django (Python3 version)
p  python3-pip - Python package installer
olej@orangepione:~$ sudo apt install python3-pip
Reading package lists... Done
Building dependency tree
Reading state information... Done
Recommended packages:
  python3-dev python3-setuptools python3-wheel
The following NEW packages will be installed:
  python3-pip
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 142 kB of archives.
After this operation, 599 kB of additional disk space will be used.
Get:1 http://cdn-fastly.deb.debian.org/debian stretch/main armhf python3-pip all 9.0.1-2 [142 kB]
Fetched 142 kB in 0s (151 kB/s)
Selecting previously unselected package python3-pip.
(Reading database ... 77624 files and directories currently installed.)
Preparing to unpack .../python3-pip_9.0.1-2_all.deb ...
Unpacking python3-pip (9.0.1-2) ...
Setting up python3-pip (9.0.1-2) ...
Processing triggers for man-db (2.7.6.1-2) ...
- повторяем:
olej@orangepione:~$ sudo python3 -m pip install virtualenv
Collecting virtualenv
  Using cached https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0

olej@orangepione:~$ sudo python3 -m pip install virtualenvwrapper
Collecting virtualenvwrapper
  Using cached https://files.pythonhosted.org/packages/2b/8c/3192e10913ad945c0f0fcb17e9b2679434a28ad58ee31ce0104cba3b1154/virtualenvwrapper-4.8.2-py2.py3-none-any.whl
Collecting stevedore (from virtualenvwrapper)
  Using cached https://files.pythonhosted.org/packages/a1/d9/93a975469c53a9ee85de9ec0deb12345aa777748b4c263860668592344fe/stevedore-1.29.0-py2.py3-none-any.whl
Collecting virtualenv-clone (from virtualenvwrapper)
  Using cached https://files.pythonhosted.org/packages/6d/c2/dccb5ccf599e0c5d1eea6acbd058af7a71384f9740179db67a9182a24798/virtualenv_clone-0.3.0-py2.py3-none-any.whl
Requirement already satisfied: virtualenv in /usr/local/lib/python3.5/dist-packages (from virtualenvwrapper)
Collecting pbr!=2.1.0,>=2.0.0 (from stevedore->virtualenvwrapper)
  Using cached https://files.pythonhosted.org/packages/69/1c/98cba002ed975a91a0294863d9c774cc0ebe38e05bbb65e83314550b1677/pbr-4.2.0-py2.py3-none-any.whl
Collecting six>=1.10.0 (from stevedore->virtualenvwrapper)
  Using cached https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
Installing collected packages: pbr, six, stevedore, virtualenv-clone, virtualenvwrapper
Successfully installed pbr-4.2.0 six-1.11.0 stevedore-1.29.0 virtualenv-clone-0.3.0 virtualenvwrapper-4.8.2

Оффлайн Olej

Re: Python: Виртуальная среда
« Ответ #3 : Август 26, 2018, 05:50:55 pm »
- повторяем:
- редактируем $HOME/~/.bashrc, дописываем туда:
olej@orangepione:~/Face$ tail -n6  ~/.bashrc
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs              # optional
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3   # optional
# export PROJECT_HOME=$HOME/projects               # optional
source /usr/local/bin/virtualenvwrapper.sh
- в другом (или в этом) окне терминала применям изменения ... и ... вторая неожиданность:
olej@orangepione:~/Face$ source ~/.bashrc
Traceback (most recent call last):
  File "/usr/lib/python3.5/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.5/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.5/dist-packages/virtualenvwrapper/hook_loader.py", line 16, in <module>
    from stevedore import ExtensionManager
  File "/usr/local/lib/python3.5/dist-packages/stevedore/__init__.py", line 11, in <module>
    from .extension import ExtensionManager
  File "/usr/local/lib/python3.5/dist-packages/stevedore/extension.py", line 17, in <module>
    import pkg_resources
ImportError: No module named 'pkg_resources'
virtualenvwrapper.sh: There was a problem running the initialization hooks.

If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 and that PATH is
set properly.

Оффлайн Olej

Re: Python: Виртуальная среда
« Ответ #4 : Август 26, 2018, 05:54:22 pm »
- в другом (или в этом) окне терминала применям изменения ... и ... вторая неожиданность:
olej@orangepione:~$ apt search pkg_resources
Sorting... Done
Full Text Search... Done
pypy-pkg-resources/stable 33.1.1-1 all
  Package Discovery and Resource Access using pkg_resources

python-pkg-resources/stable 33.1.1-1 all
  Package Discovery and Resource Access using pkg_resources

python3-pkg-resources/stable 33.1.1-1 all
  Package Discovery and Resource Access using pkg_resources
olej@orangepione:~$ sudo apt install python3-pkg-resources
[sudo] password for olej:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  python3-setuptools
The following NEW packages will be installed:
  python3-pkg-resources
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 137 kB of archives.
After this operation, 523 kB of additional disk space will be used.
Get:1 http://cdn-fastly.deb.debian.org/debian stretch/main armhf python3-pkg-resources all 33.1.1-1 [137 kB]
Fetched 137 kB in 1s (124 kB/s)
Selecting previously unselected package python3-pkg-resources.
(Reading database ... 77702 files and directories currently installed.)
Preparing to unpack .../python3-pkg-resources_33.1.1-1_all.deb ...
Unpacking python3-pkg-resources (33.1.1-1) ...
Setting up python3-pkg-resources (33.1.1-1) ...
olej@orangepione:~/Face$ source ~/.bashrc
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/premkproject
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/postmkproject
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/initialize
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/premkvirtualenv
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/postmkvirtualenv
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/prermvirtualenv
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/postrmvirtualenv
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/predeactivate
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/postdeactivate
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/preactivate
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/postactivate
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/get_env_details

Оффлайн Olej

Re: Python: Виртуальная среда
« Ответ #5 : Август 26, 2018, 05:58:16 pm »
Создаю своё 1-е виртуальное окружение Python:
olej@orangepione:~/Face$ mkvirtualenv py3cv4 -p python3
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/olej/.virtualenvs/py3cv4/bin/python3
Also creating executable in /home/olej/.virtualenvs/py3cv4/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/py3cv4/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/py3cv4/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/py3cv4/bin/preactivate
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/py3cv4/bin/postactivate
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/py3cv4/bin/get_env_details
Смотрим как сразу же поменялся вид приглашения системы на терминале:
(py3cv4) olej@orangepione:~/Face$ pip list
Package    Version
---------- -------
pip        18.0
setuptools 40.2.0
wheel      0.31.1

(py3cv4) olej@orangepione:~/Face$ python --version
Python 3.5.3
Теперь это чистая Python-система со своими умолчаниями (версий) и инсталляциями.

P.S. Обратите внимание, что если у меня в основной системе Armbian версия Python по умолчанию 2.7.13, то в этом виртуальном окружении - 3.5.3.
« Последнее редактирование: Август 26, 2018, 06:03:46 pm от Olej »

Оффлайн Olej

Re: Python: Виртуальная среда
« Ответ #6 : Август 26, 2018, 06:01:49 pm »
Теперь это чистая Python-система со своими умолчаниями (версий) и инсталляциями.
Это очень важно для Python ... не только для каких-то конкретных пакетов OpenCV, я для любых!
И это вдвойне важно для микрокомпьютера, т.к. на Python - тысячи пакетов самых разных областей применения + для самой быстрой разработки, внедрения (по сравнению с другими языками) + всё это очень компактно, что важно при ограниченных ресурсах.