Date created: Friday, September 7, 2018 9:36:37 AM. Last modified: Thursday, January 18, 2024 11:47:43 AM

--Python Notes--

Help:

Import a module in order to load it's help text:


>>> import json
>>> help(json)

Help on package json:
NAME
json
MODULE REFERENCE
https://docs.python.org/3.6/library/json
...
DESCRIPTION
JSON (JavaScript Object Notation) <http://json.org> is a subset of
JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
interchange format.

>>> help(json.loads)
Help on function loads in module json:

loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance
containing a JSON document) to a Python object.

 

History:

Python3 history is stored in ~/.python_history.

 

To print the CLI history within an interactive session:

import readline; print('\n'.join([str(readline.get_history_item(i + 1)) for i in range(readline.get_current_history_length())]))

 

Linting:

https://black.readthedocs.io/en/stable/

 

Modules:

List installed modules:

>>> help("modules")

Get the module path/location:

>>> import google.protobuf
>>> google.protobuf.__file__
'/home/bensley/.local/lib/python3.6/site-packages/google/protobuf/__init__.py'

>>> import google.protobuf
>>> import inspect
>>> inspect.getfile(google.protobuf)
'/home/bensley/.local/lib/python3.6/site-packages/google/protobuf/__init__.py'

 

Paths:

What is the current script name and location (__file__ doesn't exist in an interactive shell but 'os.getcwd()' will work):

$ cat path.py 
#!/usr/bin/env python3
import os
print(os.getcwd())
print(__file__)

$ ./path.py
/home/bensley/Python
./path.py

 

Pip (module):

Install:

python -m ensurepip --upgrade

 

Pip (standalone):

List installed packages with:

pip3 freeze

or

pip3 list

 

Upgrade pip:

sudo -H pip3 install --upgrade pip

or

sudo -H pip install --upgrade pip

On Mac with brew installed Python3:

/Library/Frameworks/Python.framework/Versions/3.7/bin/python3 -m pip install --upgrade pip

 

Clone and install a module from a git repo, from a specific branch, and specify the local package name it will be installed as:

pip install git+https://github.com/interdotlink/pynetbox-stubs.git@add-bgp-plugin-stubs#egg=pynetbox-stubs

 

Python Guides:

https://github.com/crazyguitar/pysheeet

https://treyhunner.com/2019/05/python-builtins-worth-learning/

 

Style Guides:

https://google.github.io/styleguide/pyguide.html

https://github.com/google/styleguide/blob/gh-pages/pyguide.md

 

venv:

# Using virtualenv

$ sudo apt-get install virtualenv
$ virtualenv -p `which python3` v1
$ cd v1/
$ source bin/activate
...
$ deactivate


# Using pure python

# Debian/Ubuntu $ sudo apt install --no-install-recommends python3-venv python3-pip $ python3 -m venv --without-pip --system-site-packages .venv && source .venv/bin/activate # Non-Debian/Ubuntu $ python3 -m ensurepip --upgrade $ python3 -m venv .venv && source .venv/bin/activate
# Then...
$ python3 -m pip install -r requirements.txt
$ python3 -m pip freeze -l
...
$ deactivate

 

Testing a specific branch in a venv:

$ mkdir napalm-text
$ git clone -b confirm_username_fix https://github.com/napalm-automation/napalm.git ./napalm-text/
$ cd napalm-text/
$ virtualenv -p `which python3` ./
$ source bin/activate
$ sudo -H pip3 install ./
...
$ deactivate
$ cd ../
$ rm -rf napalm-text/

 


Previous page: Problem 20
Next page: Basic Netmiko Example