Python: виртуальная среда

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Python: виртуальная среда

Непрочитанное сообщение Olej » 25 авг 2018, 16:50

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

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

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: Виртуальная среда

Непрочитанное сообщение Olej » 25 авг 2018, 16:57

Olej писал(а):Последнее время пошло много публикаций относительно виртуальных сред 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
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: Виртуальная среда

Непрочитанное сообщение Olej » 26 авг 2018, 12:05

Как я себе создавал виртуальные среду под OpenCV верс.4 & распознавание QR кодов...
Тупо следуя заметкам Adrian Rosebrock (ссылки выше).

Код: Выделить всё

[olej@xenix ~]$ python2
Python 2.7.15 (default, May 16 2018, 17:50:09) 
[GCC 8.1.1 20180502 (Red Hat 8.1.1-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.prefix
'/usr'
>>> import site
>>> data = site.getsitepackages()
>>> data
['/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages', '/usr/lib/site-python']
>>> quit()

[olej@xenix ~]$ sudo pip install virtualenv
[sudo] пароль для olej: 
Collecting virtualenv
  Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl (1.9MB)
    100% |████████████████████████████████| 1.9MB 2.4MB/s 
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0

Код: Выделить всё

[olej@xenix ~]$ sudo pip install virtualenvwrapper
Collecting virtualenvwrapper
  Downloading https://files.pythonhosted.org/packages/2b/8c/3192e10913ad945c0f0fcb17e9b2679434a28ad58ee31ce0104cba3b1154/virtualenvwrapper-4.8.2-py2.py3-none-any.whl
Collecting virtualenv-clone (from virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/6d/c2/dccb5ccf599e0c5d1eea6acbd058af7a71384f9740179db67a9182a24798/virtualenv_clone-0.3.0-py2.py3-none-any.whl
Collecting stevedore (from virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/a1/d9/93a975469c53a9ee85de9ec0deb12345aa777748b4c263860668592344fe/stevedore-1.29.0-py2.py3-none-any.whl
Requirement already satisfied: virtualenv in /usr/lib/python2.7/site-packages (from virtualenvwrapper) (16.0.0)
Requirement already satisfied: six>=1.10.0 in /usr/lib/python2.7/site-packages (from stevedore->virtualenvwrapper) (1.11.0)
Collecting pbr!=2.1.0,>=2.0.0 (from stevedore->virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/69/1c/98cba002ed975a91a0294863d9c774cc0ebe38e05bbb65e83314550b1677/pbr-4.2.0-py2.py3-none-any.whl (100kB)
    100% |████████████████████████████████| 102kB 1.8MB/s 
Installing collected packages: virtualenv-clone, pbr, stevedore, virtualenvwrapper
Successfully installed pbr-4.2.0 stevedore-1.29.0 virtualenv-clone-0.3.0 virtualenvwrapper-4.8.2

Код: Выделить всё

[olej@xenix ~]$ tail -n4 .bashrc 
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: Виртуальная среда

Непрочитанное сообщение Olej » 26 авг 2018, 12:50

Olej писал(а):

Код: Выделить всё

[olej@xenix ~]$ tail -n4 .bashrc 
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
Запускаем новую вкладку (окно) терминала, потому как нам теперь нужен новый экземпляр переменных среды и ...

Код: Выделить всё

bash: /usr/local/bin/virtualenvwrapper.sh: Нет такого файла или каталога
О! :-o
У меня совершенно другой дистрибутив Linux (ROM вместо DEB - специально на нём тренируюсь ;-) ) и пути стандартной установки пакетов отличаются!

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: Виртуальная среда

Непрочитанное сообщение Olej » 26 авг 2018, 12:52

Olej писал(а): У меня совершенно другой дистрибутив Linux (ROM вместо DEB - специально на нём тренируюсь ;-) ) и пути стандартной установки пакетов отличаются!

Код: Выделить всё

[olej@xenix ~]$ which virtualenvwrapper.sh
/usr/bin/virtualenvwrapper.sh

Код: Выделить всё

[olej@xenix ~]$ tail -n4 .bashrc 
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/bin/virtualenvwrapper.sh
Открываем ещё новое окно терминала, запускаем и ...

Код: Выделить всё

/usr/bin/python3: Error while finding module specification for 'virtualenvwrapper.hook_loader' (ModuleNotFoundError: No module named 'virtualenvwrapper')
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
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: Виртуальная среда

Непрочитанное сообщение Olej » 26 авг 2018, 12:56

Olej писал(а): Это уже ... загадочнее ;-)
Как оказалось ... путём проб и ошибок:
- я установил virtualenv + virtualenvwrapper с помощью pip под Python2 (и это нормально само по себе)
- но в .bashrc прописан Python 3
- который ничего не знает про то что... ;-)
Доустанавливаю:

Код: Выделить всё

[olej@xenix ~]$ sudo python3 -m pip install virtualenv
[sudo] пароль для olej: 
WARNING: Running pip install with root privileges is generally not a good idea. Try `__main__.py install --user` instead.
Collecting virtualenv
  Cache entry deserialization failed, entry ignored
  Cache entry deserialization failed, entry ignored
  Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl (1.9MB)
    100% |████████████████████████████████| 1.9MB 443kB/s 
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0

[olej@xenix ~]$ sudo python3 -m pip install virtualenvwrapper
WARNING: Running pip install with root privileges is generally not a good idea. Try `__main__.py install --user` instead.
Collecting virtualenvwrapper
  Cache entry deserialization failed, entry ignored
  Cache entry deserialization failed, entry ignored
  Downloading https://files.pythonhosted.org/packages/2b/8c/3192e10913ad945c0f0fcb17e9b2679434a28ad58ee31ce0104cba3b1154/virtualenvwrapper-4.8.2-py2.py3-none-any.whl
Collecting virtualenv-clone (from virtualenvwrapper)
  Cache entry deserialization failed, entry ignored
  Cache entry deserialization failed, entry ignored
  Downloading 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.6/site-packages (from virtualenvwrapper)
Collecting stevedore (from virtualenvwrapper)
  Cache entry deserialization failed, entry ignored
  Cache entry deserialization failed, entry ignored
  Downloading https://files.pythonhosted.org/packages/a1/d9/93a975469c53a9ee85de9ec0deb12345aa777748b4c263860668592344fe/stevedore-1.29.0-py2.py3-none-any.whl
Collecting pbr!=2.1.0,>=2.0.0 (from stevedore->virtualenvwrapper)
  Cache entry deserialization failed, entry ignored
  Cache entry deserialization failed, entry ignored
  Downloading https://files.pythonhosted.org/packages/69/1c/98cba002ed975a91a0294863d9c774cc0ebe38e05bbb65e83314550b1677/pbr-4.2.0-py2.py3-none-any.whl (100kB)
    100% |████████████████████████████████| 102kB 1.5MB/s 
Requirement already satisfied: six>=1.10.0 in /usr/lib/python3.6/site-packages (from stevedore->virtualenvwrapper)
Installing collected packages: virtualenv-clone, pbr, stevedore, virtualenvwrapper
Successfully installed pbr-4.2.0 stevedore-1.29.0 virtualenv-clone-0.3.0 virtualenvwrapper-4.8.2

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: Виртуальная среда

Непрочитанное сообщение Olej » 26 авг 2018, 13:02

Olej писал(а):
Olej писал(а): Доустанавливаю:

Код: Выделить всё

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
Как я предполагаю (но не проверял), в .bashrc могло бы быть прописано:

Код: Выделить всё

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
(или даже пропущена эта строка - она альтернативная).
И тогда бы виртуальные окружения создавались бы (см. ниже) нормально, но дефайлтным там был бы Python2, что можно поменять опциями при создании.

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: Виртуальная среда

Непрочитанное сообщение Olej » 26 авг 2018, 13:06

Olej писал(а): И тогда бы виртуальные окружения создавались бы
Создаю новое виртуальное окружение:

Код: Выделить всё

[olej@xenix ~]$ mkvirtualenv py3cv3 -p python3
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/olej/.virtualenvs/py3cv3/bin/python3
Also creating executable in /home/olej/.virtualenvs/py3cv3/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/py3cv3/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/py3cv3/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/py3cv3/bin/preactivate
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/py3cv3/bin/postactivate
virtualenvwrapper.user_scripts creating /home/olej/.virtualenvs/py3cv3/bin/get_env_details
Сразу же поменялась подсказка на терминале!

Код: Выделить всё

(py3cv3) [olej@xenix ~]$ ls ~/.virtualenvs/py3cv3/bin
activate      activate.fish     easy_install      get_env_details  pip3    postactivate    preactivate    python   python3.6      wheel
activate.csh  activate_this.py  easy_install-3.6  pip              pip3.6  postdeactivate  predeactivate  python3  python-config

Код: Выделить всё

(py3cv3) [olej@xenix ~]$ pip list
Package    Version
---------- -------
pip        18.0   
setuptools 40.2.0 
wheel      0.31.1 
Превосходно!
Абсолютно чистое окружение, в котором ничего нет и устанавливать можно и надо с нуля.

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: Виртуальная среда

Непрочитанное сообщение Olej » 26 авг 2018, 13:09

Olej писал(а): Создаю новое виртуальное окружение:
Первейшее дело входя куда-нибудь побеспокоиться как же будем потом оттуда выходить... ;-)
В новом окне терминала:

Код: Выделить всё

[olej@xenix ~]$ source ~/.virtualenvs/py3cv3/bin/activate
(py3cv3) [olej@xenix ~]$ deactivate
... вошли...

Код: Выделить всё

(py3cv3) [olej@xenix ~]$ which python
~/.virtualenvs/py3cv3/bin/python

(py3cv3) [olej@xenix ~]$ python --version
Python 3.6.6

Код: Выделить всё

(py3cv3) [olej@xenix ~]$ deactivate
[olej@xenix ~]$ 
... вышли...

Код: Выделить всё

[olej@xenix ~]$ python --version
Python 2.7.15

Код: Выделить всё

[olej@xenix ~]$ pip list
Package                      Version    
---------------------------- -----------
backports.ssl-match-hostname 3.5.0.1    
beautifulsoup4               4.6.0      
chardet                      3.0.4      
cssselect                    0.9.2      
cycler                       0.10.0     
dockerpty                    0.4.1      
enum34                       1.1.6      
functools32                  3.2.3.post2
galternatives                0.9        
html5lib                     0.999999999
idna                         2.5        
ipaddr                       2.1.10     
ipaddress                    1.0.18     
libvirt-python               4.1.0      
lxml                         4.1.1      
matplotlib                   2.0.2      
mercurial                    4.4.2      
nose                         1.3.7      
numpy                        1.14.5     
ocl                          0.12       
pbr                          4.2.0      
Pillow                       5.2.0      
pip                          18.0       
pkinter                      1.31.0     
pycairo                      1.16.3     
pycurl                       7.43.0.2   
pygobject                    3.28.3     
PyPAM                        0.5.0      
pyparsing                    2.2.0      
PySocks                      1.6.8      
python-dateutil              2.7.3      
python-dmidecode             3.12.2     
pytz                         2017.2     
pyxattr                      0.5.3      
PyYAML                       3.12       
repoze.lru                   0.4        
requests                     2.18.4     
rpm                          4.14.1     
setproctitle                 1.1.10     
setuptools                   39.2.0     
six                          1.11.0     
smartcols                    0.3.0      
stevedore                    1.29.0     
subprocess32                 3.2.7      
tkBasic                      0.2        
urlgrabber                   3.10.1     
urllib3                      1.22       
virtualenv                   16.0.0     
virtualenv-clone             0.3.0      
virtualenvwrapper            4.8.2      
webencodings                 0.5.1      
zenmap                       7.60       

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Python: Виртуальная среда

Непрочитанное сообщение Olej » 26 авг 2018, 13:18

Вдогонку:
Olej писал(а): Запускаем новую вкладку (окно) терминала, потому как нам теперь нужен новый экземпляр переменных среды и ...
Кстати, можно и не создавать новый терминал, а только перезагрузить переменные окружения:

Код: Выделить всё

[olej@xenix ~]$ source ~/.bashrc
Убеждаемся:

Код: Выделить всё

[olej@xenix ~]$ echo $WORKON_HOME
/home/olej/.virtualenvs
Но это уже вопросы только удобства...

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей