12. ਵਰਚੁਅਲ ਇਨਵਾਇਰਨਮੈਂਟ ਅਤੇ ਪੈਕੇਜ

12.1. ਜਾਣ-ਪਛਾਣ

Python applications ਅਕਸਰ ਅਜਿਹੇ packages ਅਤੇ modules ਵਰਤਦੀਆਂ ਹਨ ਜੋ standard library ਦਾ ਹਿੱਸਾ ਨਹੀਂ ਹੁੰਦੇ। ਕਈ ਵਾਰ ਕਿਸੇ application ਨੂੰ library ਦੇ ਇੱਕ ਖਾਸ version ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਕਿਉਂਕਿ ਉਸਨੂੰ ਕਿਸੇ ਖਾਸ bug ਦੇ ਠੀਕ ਹੋਣ ਦੀ ਲੋੜ ਹੋ ਸਕਦੀ ਹੈ ਜਾਂ ਉਹ library ਦੇ ਪੁਰਾਣੇ interface version ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲਿਖੀ ਗਈ ਹੋ ਸਕਦੀ ਹੈ।

ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਇੱਕ ਹੀ Python installation ਹਰ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਲੋੜ ਪੂਰੀ ਨਹੀਂ ਕਰ ਸਕਦੀ। ਜੇ ਐਪਲੀਕੇਸ਼ਨ A ਨੂੰ ਕਿਸੇ module ਦਾ version 1.0 ਚਾਹੀਦਾ ਹੈ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ B ਨੂੰ version 2.0, ਤਾਂ ਦੋਹਾਂ ਦੀਆਂ ਲੋੜਾਂ ਆਪਸ ਵਿੱਚ ਟਕਰਾਉਂਦੀਆਂ ਹਨ ਅਤੇ version 1.0 ਜਾਂ 2.0 ਵਿੱਚੋਂ ਕੋਈ ਇੱਕ install ਕਰਨ ਨਾਲ ਇੱਕ ਐਪਲੀਕੇਸ਼ਨ ਨਹੀਂ ਚੱਲੇਗੀ।

ਇਸ ਸਮੱਸਿਆ ਦਾ ਹੱਲ ਇੱਕ virtual environment ਬਣਾਉਣਾ ਹੈ, ਜੋ ਇੱਕ ਸਵੈ-ਨਿਰਭਰ directory tree ਹੁੰਦਾ ਹੈ ਜਿਸ ਵਿੱਚ Python ਦੇ ਕਿਸੇ ਖਾਸ version ਦੀ installation ਅਤੇ ਕੁਝ ਵਾਧੂ packages ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ।

ਫਿਰ ਵੱਖ-ਵੱਖ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵੱਖ-ਵੱਖ virtual environments ਵਰਤ ਸਕਦੀਆਂ ਹਨ। ਪਿਛਲੀ ਉਦਾਹਰਨ ਵਿੱਚ, ਐਪਲੀਕੇਸ਼ਨ A ਆਪਣੇ virtual environment ਵਿੱਚ version 1.0 ਰੱਖ ਸਕਦੀ ਹੈ ਜਦਕਿ ਐਪਲੀਕੇਸ਼ਨ B version 2.0 ਵਰਤ ਸਕਦੀ ਹੈ। ਜੇ ਐਪਲੀਕੇਸ਼ਨ B ਨੂੰ ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ version 3.0 ਤੱਕ upgrade ਕਰਨ ਦੀ ਲੋੜ ਪਵੇ, ਤਾਂ ਇਸਦਾ ਐਪਲੀਕੇਸ਼ਨ A ਦੇ environment ਉੱਤੇ ਕੋਈ ਅਸਰ ਨਹੀਂ ਪਵੇਗਾ।

12.2. ਵਰਚੁਅਲ ਇਨਵਾਇਰਨਮੈਂਟ ਬਣਾਉਣਾ

ਵਰਚੁਅਲ ਇਨਵਾਇਰਨਮੈਂਟ ਬਣਾਉਣ ਅਤੇ ਸੰਭਾਲਣ ਲਈ ਵਰਤਿਆ ਜਾਣ ਵਾਲਾ ਮੋਡੀਊਲ venv ਕਹਾਉਂਦਾ ਹੈ। venv ਉਸ Python version ਨੂੰ install ਕਰੇਗਾ ਜਿਸ ਤੋਂ ਕਮਾਂਡ ਚਲਾਈ ਗਈ ਸੀ (ਜਿਵੇਂ --version ਵਿਕਲਪ ਦੁਆਰਾ ਦਰਸਾਇਆ ਜਾਂਦਾ ਹੈ)। ਉਦਾਹਰਨ ਲਈ, python3.12 ਨਾਲ ਕਮਾਂਡ ਚਲਾਉਣ 'ਤੇ version 3.12 install ਹੋਵੇਗਾ।

ਵਰਚੁਅਲ ਇਨਵਾਇਰਨਮੈਂਟ ਬਣਾਉਣ ਲਈ ਪਹਿਲਾਂ ਉਹ ਡਾਇਰੈਕਟਰੀ ਚੁਣੋ ਜਿੱਥੇ ਤੁਸੀਂ ਇਸਨੂੰ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ, ਅਤੇ ਫਿਰ venv ਮੋਡੀਊਲ ਨੂੰ ਡਾਇਰੈਕਟਰੀ path ਨਾਲ ਸਕ੍ਰਿਪਟ ਵਜੋਂ ਚਲਾਓ:

python -m venv tutorial-env

ਜੇ tutorial-env ਡਾਇਰੈਕਟਰੀ ਮੌਜੂਦ ਨਹੀਂ ਹੈ ਤਾਂ ਇਹ ਉਸਨੂੰ ਬਣਾਏਗਾ, ਅਤੇ ਇਸਦੇ ਅੰਦਰ Python interpreter ਦੀ ਇੱਕ ਕਾਪੀ ਅਤੇ ਹੋਰ ਸਹਾਇਕ ਫਾਈਲਾਂ ਵਾਲੀਆਂ ਡਾਇਰੈਕਟਰੀਆਂ ਵੀ ਬਣਾਏਗਾ।

ਵਰਚੁਅਲ ਇਨਵਾਇਰਨਮੈਂਟ ਲਈ ਇੱਕ ਆਮ ਡਾਇਰੈਕਟਰੀ ਨਾਮ .venv ਹੈ। ਇਹ ਨਾਮ ਆਮ ਤੌਰ 'ਤੇ ਡਾਇਰੈਕਟਰੀ ਨੂੰ shell ਵਿੱਚ ਲੁਕਿਆ ਰੱਖਦਾ ਹੈ ਅਤੇ ਨਾਲ ਹੀ ਇਹ ਵੀ ਦੱਸਦਾ ਹੈ ਕਿ ਇਹ ਡਾਇਰੈਕਟਰੀ ਕਿਉਂ ਮੌਜੂਦ ਹੈ। ਇਹ ਕੁਝ tools ਦੁਆਰਾ ਸਮਰਥਿਤ .env environment variable ਫਾਈਲਾਂ ਨਾਲ ਟਕਰਾਅ ਤੋਂ ਵੀ ਬਚਾਉਂਦਾ ਹੈ।

ਵਰਚੁਅਲ ਇਨਵਾਇਰਨਮੈਂਟ ਬਣਾਉਣ ਤੋਂ ਬਾਅਦ ਤੁਸੀਂ ਇਸਨੂੰ ਸਰਗਰਮ ਕਰ ਸਕਦੇ ਹੋ।

Windows ਉੱਤੇ ਇਹ ਚਲਾਓ:

tutorial-env\Scripts\activate

Unix ਜਾਂ MacOS ਉੱਤੇ ਇਹ ਚਲਾਓ:

source tutorial-env/bin/activate

(ਇਹ ਸਕ੍ਰਿਪਟ bash shell ਲਈ ਲਿਖੀ ਗਈ ਹੈ। ਜੇ ਤੁਸੀਂ csh ਜਾਂ fish shells ਵਰਤਦੇ ਹੋ, ਤਾਂ ਇਸਦੀ ਥਾਂ activate.csh ਜਾਂ activate.fish ਸਕ੍ਰਿਪਟਾਂ ਵਰਤਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ।)

ਵਰਚੁਅਲ ਇਨਵਾਇਰਨਮੈਂਟ ਨੂੰ ਸਰਗਰਮ ਕਰਨ ਨਾਲ shell prompt ਵਿੱਚ ਵਰਤਿਆ ਜਾ ਰਿਹਾ ਇਨਵਾਇਰਨਮੈਂਟ ਦਿਖਾਈ ਦੇਵੇਗਾ ਅਤੇ environment ਇਸ ਤਰ੍ਹਾਂ ਬਦਲਿਆ ਜਾਵੇਗਾ ਕਿ python ਚਲਾਉਣ 'ਤੇ ਉਸੇ ਖਾਸ Python installation ਅਤੇ version ਦੀ ਵਰਤੋਂ ਹੋਵੇਗੀ। ਉਦਾਹਰਨ ਲਈ:

$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 3.5.1 (default, May  6 2016, 10:59:36)
  ...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', ...,
'~/envs/tutorial-env/lib/python3.5/site-packages']
>>>

ਧਿਆਨ ਦਿਓ ਕਿ ਸਰਗਰਮ virtual environment PYTHONPATH variable ਨੂੰ ਕਿਸੇ ਵੀ ਤਰੀਕੇ ਨਾਲ ਨਹੀਂ ਬਦਲਦਾ। ਜੇ path ਵਿੱਚ ਅਜਿਹੇ code ਦੇ ਹਵਾਲੇ ਸ਼ਾਮਲ ਹਨ ਜੋ virtual environment ਦੁਆਰਾ ਵਰਤੇ ਜਾ ਰਹੇ Python version ਨਾਲ ਅਨੁਕੂਲ ਨਹੀਂ ਹਨ, ਤਾਂ ਇਸ ਨਾਲ ਅਣਉਮੀਦੇ ਨਤੀਜੇ ਆ ਸਕਦੇ ਹਨ। ਸਭ ਤੋਂ ਵਧੀਆ ਅਭਿਆਸ ਇਹ ਹੈ ਕਿ bash ਵਿੱਚ unset PYTHONPATH ਚਲਾਇਆ ਜਾਵੇ ਜਾਂ ਤੁਹਾਡੇ ਦੁਆਰਾ ਵਰਤੇ ਜਾ ਰਹੇ shell ਦੇ ਸਮਕੱਖ command ਵਰਤੀ ਜਾਵੇ।

ਵਰਚੁਅਲ ਇਨਵਾਇਰਨਮੈਂਟ ਨੂੰ ਅਯੋਗ ਕਰਨ ਲਈ ਇਹ ਲਿਖੋ:

deactivate

ਟਰਮੀਨਲ ਵਿੱਚ।

12.3. pip ਨਾਲ ਪੈਕੇਜਾਂ ਦਾ ਪ੍ਰਬੰਧਨ

ਤੁਸੀਂ pip ਨਾਮਕ ਪ੍ਰੋਗਰਾਮ ਦੀ ਵਰਤੋਂ ਕਰਕੇ packages install, upgrade ਅਤੇ remove ਕਰ ਸਕਦੇ ਹੋ। ਡਿਫਾਲਟ ਤੌਰ 'ਤੇ pip Python Package Index ਤੋਂ packages install ਕਰਦਾ ਹੈ। ਤੁਸੀਂ ਆਪਣੇ ਵੈੱਬ ਬ੍ਰਾਊਜ਼ਰ ਰਾਹੀਂ Python Package Index ਨੂੰ ਵੇਖ ਸਕਦੇ ਹੋ।

pip ਕੋਲ ਕਈ subcommands ਹਨ ਜਿਵੇਂ "install", "uninstall", "freeze" ਆਦਿ। (pip ਦੀ ਪੂਰੀ ਦਸਤਾਵੇਜ਼ੀਕਰਨ ਲਈ Installing Python modules ਗਾਈਡ ਵੇਖੋ।)

ਤੁਸੀਂ ਕਿਸੇ package ਦਾ ਨਾਮ ਦੇ ਕੇ ਉਸਦਾ ਸਭ ਤੋਂ ਨਵਾਂ version install ਕਰ ਸਕਦੇ ਹੋ:

(tutorial-env) $ python -m pip install novas
Collecting novas
  Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
  Running setup.py install for novas
Successfully installed novas-3.1.1.3

ਤੁਸੀਂ ਕਿਸੇ package ਦਾ ਖਾਸ version ਵੀ install ਕਰ ਸਕਦੇ ਹੋ, ਇਸ ਲਈ package ਦੇ ਨਾਮ ਤੋਂ ਬਾਅਦ == ਅਤੇ version number ਲਿਖੋ:

(tutorial-env) $ python -m pip install requests==2.6.0
Collecting requests==2.6.0
  Using cached requests-2.6.0-py2.py3-none-any.whl
Installing collected packages: requests
Successfully installed requests-2.6.0

ਜੇ ਤੁਸੀਂ ਇਹ ਕਮਾਂਡ ਮੁੜ ਚਲਾਉਂਦੇ ਹੋ, ਤਾਂ pip ਵੇਖੇਗਾ ਕਿ ਮੰਗਿਆ ਗਿਆ version ਪਹਿਲਾਂ ਹੀ install ਹੈ ਅਤੇ ਕੋਈ ਕਾਰਵਾਈ ਨਹੀਂ ਕਰੇਗਾ। ਤੁਸੀਂ ਹੋਰ version number ਦੇ ਸਕਦੇ ਹੋ ਜਾਂ package ਨੂੰ ਨਵੇਂ version ਤੱਕ ਅੱਪਗ੍ਰੇਡ ਕਰਨ ਲਈ python -m pip install --upgrade ਚਲਾ ਸਕਦੇ ਹੋ:

(tutorial-env) $ python -m pip install --upgrade requests
Collecting requests
Installing collected packages: requests
  Found existing installation: requests 2.6.0
    Uninstalling requests-2.6.0:
      Successfully uninstalled requests-2.6.0
Successfully installed requests-2.7.0

python -m pip uninstall ਤੋਂ ਬਾਅਦ ਇੱਕ ਜਾਂ ਵੱਧ package ਨਾਮ ਦੇਣ ਨਾਲ ਉਹ packages ਵਰਚੁਅਲ ਇਨਵਾਇਰਨਮੈਂਟ ਤੋਂ ਹਟਾ ਦਿੱਤੇ ਜਾਣਗੇ।

python -m pip show ਕਿਸੇ ਖਾਸ package ਬਾਰੇ ਜਾਣਕਾਰੀ ਦਿਖਾਏਗਾ:

(tutorial-env) $ python -m pip show requests
---
Metadata-Version: 2.0
Name: requests
Version: 2.7.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.com
License: Apache 2.0
Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
Requires:

python -m pip list ਵਰਚੁਅਲ ਇਨਵਾਇਰਨਮੈਂਟ ਵਿੱਚ install ਕੀਤੇ ਸਾਰੇ packages ਦੀ ਸੂਚੀ ਦਿਖਾਏਗਾ:

(tutorial-env) $ python -m pip list
novas (3.1.1.3)
numpy (1.9.2)
pip (7.0.3)
requests (2.7.0)
setuptools (16.0)

python -m pip freeze install ਕੀਤੇ packages ਦੀ ਇਸੇ ਤਰ੍ਹਾਂ ਦੀ ਸੂਚੀ ਤਿਆਰ ਕਰੇਗਾ, ਪਰ ਇਸਦਾ output ਉਸ format ਵਿੱਚ ਹੋਵੇਗਾ ਜਿਸਦੀ python -m pip install ਉਮੀਦ ਕਰਦਾ ਹੈ। ਇੱਕ ਆਮ ਰਵਾਇਤ ਇਹ ਹੈ ਕਿ ਇਸ ਸੂਚੀ ਨੂੰ requirements.txt ਫਾਈਲ ਵਿੱਚ ਰੱਖਿਆ ਜਾਵੇ:

(tutorial-env) $ python -m pip freeze > requirements.txt
(tutorial-env) $ cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0

ਇਸ ਤੋਂ ਬਾਅਦ requirements.txt ਨੂੰ version control ਵਿੱਚ commit ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ ਦੇ ਹਿੱਸੇ ਵਜੋਂ ਸ਼ਾਮਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਫਿਰ ਵਰਤੋਂਕਾਰ install -r ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸਾਰੇ ਲੋੜੀਂਦੇ packages install ਕਰ ਸਕਦੇ ਹਨ:

(tutorial-env) $ python -m pip install -r requirements.txt
Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
  ...
Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
  ...
Collecting requests==2.7.0 (from -r requirements.txt (line 3))
  ...
Installing collected packages: novas, numpy, requests
  Running setup.py install for novas
Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0

pip ਕੋਲ ਇਸ ਤੋਂ ਇਲਾਵਾ ਹੋਰ ਵੀ ਬਹੁਤ ਸਾਰੇ ਵਿਕਲਪ ਹਨ। pip ਦੀ ਪੂਰੀ ਦਸਤਾਵੇਜ਼ੀਕਰਨ ਲਈ Installing Python modules ਗਾਈਡ ਵੇਖੋ। ਜਦੋਂ ਤੁਸੀਂ ਕੋਈ package ਤਿਆਰ ਕਰ ਲਓ ਅਤੇ ਉਸਨੂੰ Python Package Index ਉੱਤੇ ਉਪਲਬਧ ਕਰਵਾਉਣਾ ਚਾਹੋ, ਤਾਂ Python packaging user guide ਵੇਖੋ।