adding a text file of quick python hacks
This commit is contained in:
parent
5b941f171f
commit
c546d427fd
86
ref/python.tips_tricks_and_dirty_hacks
Normal file
86
ref/python.tips_tricks_and_dirty_hacks
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
This is a collection of snippets that I tend to use frequently, or would need
|
||||||
|
in the future.
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
To programmatically import a list of modules by name:
|
||||||
|
_____
|
||||||
|
import importlib
|
||||||
|
|
||||||
|
mods = ['os', 'sys', 'shutil', 'platform']
|
||||||
|
|
||||||
|
for m in mods:
|
||||||
|
globals()[m] = importlib.import_module(m)
|
||||||
|
_____
|
||||||
|
you can then use them as if you did:
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import shutil
|
||||||
|
import platform
|
||||||
|
etc.
|
||||||
|
|
||||||
|
this breaks pep-8, but sometimes you need to programmatically import modules.
|
||||||
|
|
||||||
|
ref: https://www.python.org/dev/peps/pep-0008/#imports
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
To programmatically install modules via pip if they aren't installed:
|
||||||
|
|
||||||
|
____
|
||||||
|
import importlib
|
||||||
|
import pip
|
||||||
|
|
||||||
|
# I don't *think* pip/pypi is case-sensitive, but frequently module names are
|
||||||
|
# not the same as their package names. ugh.
|
||||||
|
# The key is the package name, the value is the module name. We use the above
|
||||||
|
# trick here to try to import and install if it fails.
|
||||||
|
mods = {'PyMySQL': 'pymysql',
|
||||||
|
'Jinja2': 'jinja2',
|
||||||
|
'psutil': None, # We show off a little bit here with this, see below.
|
||||||
|
'paramiko': None} # ""
|
||||||
|
|
||||||
|
for m in mods.keys():
|
||||||
|
modname = mods[m]
|
||||||
|
if not modname:
|
||||||
|
modname = m
|
||||||
|
try:
|
||||||
|
globals()[modname] = importlib.import_module(modname)
|
||||||
|
except ImportError:
|
||||||
|
# We use --user to avoid conflicts with the host's python system.
|
||||||
|
# pip.main() accepts all of pip (commandline)'s args!
|
||||||
|
pip.main(['install', '--user', m])
|
||||||
|
try:
|
||||||
|
globals()[modname] = importlib.import_module(modname)
|
||||||
|
except ImportError:
|
||||||
|
raise RuntimeError('Unable to install {0}!'.format(m))
|
||||||
|
____
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
To convert an argparse set of parsed arguments into a dict from a class, you
|
||||||
|
simply do:
|
||||||
|
____
|
||||||
|
def GenArgs():
|
||||||
|
args = argparse.ArgumentParser()
|
||||||
|
# args here
|
||||||
|
return(args)
|
||||||
|
|
||||||
|
def somefunc():
|
||||||
|
args = vars(GenArgs().parse_args())
|
||||||
|
____
|
||||||
|
"args" in somefunc is a dict now.
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
To dynamically allocate class parameters into constants from a dict (such as
|
||||||
|
from argparse - see above), do something like this:
|
||||||
|
____
|
||||||
|
class ClassName(object):
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
for i in kwargs.keys():
|
||||||
|
setattr(self, i, kwargs[i])
|
||||||
|
----
|
||||||
|
###############################################################################
|
||||||
|
|
Loading…
Reference in New Issue
Block a user