How to install Python packages with pipenv, venv or virtualenv package manager

You can find GitHub repository in https://github.com/python-projects-kenanhancer/python_demo

  • Pyenv – Python Runtime Version Manager
  • Pipenv – Python Package Manager and Virtual environment manager
  • Venv – Virtual environment manager
  • Virtualenv – Virtual environment manager

Installing Python Runtime Versions via Pyenv

In order to test different Python Runtime versions, I have installed some versions.

$ pyenv install 3.10.2

python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.10.2.tar.xz...
-> https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tar.xz
Installing Python-3.10.2...
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.10.2 to /Users/kenanhancer/.pyenv/versions/3.10.2

I have 4 Python runtime versions(3.10.2, 3.10.3, 3.10.4, 3.10.5) in my machine.

$ pyenv versions

  system
  3.10.2
  3.10.3
  3.10.4
* 3.10.5 (set by /Users/kenanhancer/.pyenv/version)

Creating a new project

$ mkdir python_demo1
$ cd python_demo1
$ pyenv local 3.10.2
$ pyenv version

3.10.2 (set by /Users/kenanhancer/Documents/projects/python_demo1/.python-version)
$ python -m pip list

Package    Version
---------- -------
pip        21.2.4
setuptools 58.1.0
WARNING: You are using pip version 21.2.4; however, version 22.2 is available.
You should consider upgrading via the '/Users/kenanhancer/.pyenv/versions/3.10.2/bin/python -m pip install --upgrade pip' command.
$ python -m pip install --upgrade pip

Requirement already satisfied: pip in /Users/kenanhancer/.pyenv/versions/3.10.2/lib/python3.10/site-packages (21.2.4)
Collecting pip
  Using cached pip-22.2-py3-none-any.whl (2.0 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 21.2.4
    Uninstalling pip-21.2.4:
      Successfully uninstalled pip-21.2.4
Successfully installed pip-22.2
$ python -m pip list

Package    Version
---------- -------
pip        22.2
setuptools 58.1.0

Creating virtual environment via Pipenv

$ python -m pip install pipenv

Collecting pipenv
  Downloading pipenv-2022.7.24-py2.py3-none-any.whl (3.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.7/3.7 MB 12.3 MB/s eta 0:00:00
Requirement already satisfied: setuptools>=36.2.1 in /Users/kenanhancer/.pyenv/versions/3.10.2/lib/python3.10/site-packages (from pipenv) (58.1.0)
Collecting virtualenv-clone>=0.2.5
  Using cached virtualenv_clone-0.5.7-py3-none-any.whl (6.6 kB)
Requirement already satisfied: pip>=22.0.4 in /Users/kenanhancer/.pyenv/versions/3.10.2/lib/python3.10/site-packages (from pipenv) (22.2)
Collecting virtualenv
  Using cached virtualenv-20.15.1-py2.py3-none-any.whl (10.1 MB)
Collecting certifi
  Using cached certifi-2022.6.15-py3-none-any.whl (160 kB)
Collecting platformdirs<3,>=2
  Using cached platformdirs-2.5.2-py3-none-any.whl (14 kB)
Collecting six<2,>=1.9.0
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting distlib<1,>=0.3.1
  Using cached distlib-0.3.5-py2.py3-none-any.whl (466 kB)
Collecting filelock<4,>=3.2
  Using cached filelock-3.7.1-py3-none-any.whl (10 kB)
Installing collected packages: distlib, virtualenv-clone, six, platformdirs, filelock, certifi, virtualenv, pipenv
Successfully installed certifi-2022.6.15 distlib-0.3.5 filelock-3.7.1 pipenv-2022.7.24 platformdirs-2.5.2 six-1.16.0 virtualenv-20.15.1 virtualenv-clone-0.5.7
$ python -m pip list

Package          Version
---------------- ---------
certifi          2022.6.15
distlib          0.3.5
filelock         3.7.1
pip              22.2
pipenv           2022.7.24
platformdirs     2.5.2
setuptools       58.1.0
six              1.16.0
virtualenv       20.15.1
virtualenv-clone 0.5.7

pipenv help

$ python -m pipenv install --three

Creating a virtualenv for this project...
Pipfile: /Users/kenanhancer/Documents/projects/python_demo1/Pipfile
Using /Users/kenanhancer/.pyenv/versions/3.10.5/bin/python3 (3.10.5) to create virtualenv...
⠹ Creating virtual environment...created virtual environment CPython3.10.5.final.0-64 in 166ms
  creator CPython3Posix(dest=/Users/kenanhancer/.local/share/virtualenvs/python_demo1-hPpiqctY, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/kenanhancer/Library/Application Support/virtualenv)
    added seed packages: pip==22.1.2, setuptools==62.6.0, wheel==0.37.1
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

✔ Successfully created virtual environment! 
Virtualenv location: /Users/kenanhancer/.local/share/virtualenvs/python_demo1-hPpiqctY
Creating a Pipfile for this project...
Pipfile.lock not found, creating...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Updated Pipfile.lock (e4eef2)!
Installing dependencies from Pipfile.lock (e4eef2)...
  ?   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
$ tree -a

.
├── .python-version
├── Pipfile
└── Pipfile.lock

0 directories, 3 files

.python-version file is created by pyenv
Pipfile and Pipfile.lock are created by pipenv

3.10.3
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.10"
{
    "_meta": {
        "hash": {
            "sha256": "fedbd2ab7afd84cf16f128af0619749267b62277b4cb6989ef16d4bef6e4eef2"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.10"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {},
    "develop": {}
}
$ pipenv install requests

Installing requests...
Adding requests to Pipfile's [packages]...
✔ Installation Succeeded 
Installing dependencies from Pipfile.lock (d1a991)...
  ?   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.

As shown in the following Piffle, requests package is added in [packages] section (in line 7)

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
requests = "*"

[dev-packages]

[requires]
python_version = "3.10"
$ pipenv graph

requests==2.28.1
  - certifi [required: >=2017.4.17, installed: 2022.6.15]
  - charset-normalizer [required: >=2,<3, installed: 2.1.0]
  - idna [required: >=2.5,<4, installed: 3.3]
  - urllib3 [required: >=1.21.1,<1.27, installed: 1.26.11]
$ kenanhancer@MacBook-Air python_demo1 % python -m pipenv shell

Launching subshell in virtual environment...
 . /Users/kenanhancer/.local/share/virtualenvs/python_demo1-hPpiqctY/bin/activate
kenanhancer@MacBook-Air python_demo1 %  . /Users/kenanhancer/.local/share/virtualenvs/python_demo1-hPpiqctY/bin/activate
$ (python_demo1) kenanhancer@MacBook-Air python_demo1 %

After activating pipenv shell, requests Python package is listed as well. So, we can list installed packages after activating pipenv shell or run pipenv graph without activating shell.

$ (python_demo1) kenanhancer@MacBook-Air python_demo1 % pip list

Package            Version
------------------ ---------
certifi            2022.6.15
charset-normalizer 2.1.0
idna               3.3
pip                22.1.2
requests           2.28.1
setuptools         63.2.0
urllib3            1.26.11
wheel              0.37.1
$ (python_demo1) kenanhancer@MacBook-Air python_demo1 % python -c "
import requests

#the required first parameter of the 'get' method is the 'url':
x = requests.get('https://w3schools.com/python/demopage.htm')

#print the response text (the content of the requested file):
print(x.text)
"

<!DOCTYPE html>
<html>
<body>

<h1>This is a Test Page</h1>

</body>
</html>

I install jq package to format JSON output.

$ (python_demo1) kenanhancer@MacBook-Air python_demo1 % python -c "
import requests

# Making a GET request
response = requests.get('https://api.github.com/users/kenanhancer')

# print content of request
print(response.text)" | jq

{
  "login": "kenanhancer",
  "id": 1851856,
  "node_id": "MDQ6VXNlcjE4NTE4NTY=",
  "avatar_url": "https://avatars.githubusercontent.com/u/1851856?v=4",
  "gravatar_id": "",
  "url": "https://api.github.com/users/kenanhancer",
  "html_url": "https://github.com/kenanhancer",
  "followers_url": "https://api.github.com/users/kenanhancer/followers",
  "following_url": "https://api.github.com/users/kenanhancer/following{/other_user}",
  "gists_url": "https://api.github.com/users/kenanhancer/gists{/gist_id}",
  "starred_url": "https://api.github.com/users/kenanhancer/starred{/owner}{/repo}",
  "subscriptions_url": "https://api.github.com/users/kenanhancer/subscriptions",
  "organizations_url": "https://api.github.com/users/kenanhancer/orgs",
  "repos_url": "https://api.github.com/users/kenanhancer/repos",
  "events_url": "https://api.github.com/users/kenanhancer/events{/privacy}",
  "received_events_url": "https://api.github.com/users/kenanhancer/received_events",
  "type": "User",
  "site_admin": false,
  "name": "kenan hancer",
  "company": "Lloyds Banking Group",
  "blog": "http://www.kenanhancer.com",
  "location": "United Kingdom",
  "email": null,
  "hireable": true,
  "bio": null,
  "twitter_username": null,
  "public_repos": 49,
  "public_gists": 38,
  "followers": 16,
  "following": 1,
  "created_at": "2012-06-14T21:04:20Z",
  "updated_at": "2022-07-24T08:21:49Z"
}

Leave a Reply