Skip to content

Python

Pipenv

Créer un Pipfile à partir d'un requirements.txt:

1
2
pipenv --python 3.7 
pipenv install -r requirements.txt

utf-8

https://blog.emacsos.com/unicode-in-python.html

les string unicode ont un type unicode

0) pour éviter de mettre u'blabla' devant chaque string pour avoir des unicode string en python 2.7

1
from __future__ import unicode_literals

1) pour traiter l'unicode en interne, il faut déclarer l'encoding dans le fichier .py

1
# coding=utf-8

ne pas oublier que quand un string unicode est mis dans un container (ex: une liste), python le représentera dans le stdout en hexa.

2) pour ecrire dans un fichier, il faut encoder en utf-8 afin de récupérer un type str

1
2
with open("urls.txt", "w") as file:
    file.write("日光灯".encode('utf-8'))

Packager du python

Méthode 1: créer un package pip.

  • OK pour librairie
  • Nul pour les applications: comment on rollback ? uninstall? pff

Méthode 2: freeze code

  • pip install cx_freeze permet de créer un installer. 0 dependance python nécessaire.
  • peut s'appeler en CLI ou via un setup.py

Méthode 3: conda

https://github.com/conda/conda

Méthode 4: pex

Utilisé chez twitter pour déployer en prod.

https://pex.readthedocs.io/en/latest/index.html

Si on met un __main__.py quelque-part et que #!/usr/bin/env python est en haut du fichier, alors il devient executable. Donc : création d'un fichier zip qui contient le hashbang python en 1ere ligne et qui contient le fichier __main__.py

Setup.py

Dotenv

Passage par référence

1
2
3
4
5
6
7
def something(array):
    array.append("two")
    array = ["three","four"]

array = ["one"]
something(array)
print array

Il sera affiché ["one", "two"]. L'assignation de variable est locale

1
2
3
4
5
6
matrix = []
row = [0, 0]
for i in range(2):
    matrix.append(row)
matrix[1][1] = 1
print matrix

Il sera affiché: [[0,1], [0,1]] car on modifie le meme objet passé par reference

installer les requirements

ce truc lit les imports dans les scripts python

1
2
3
pip install pipreqs
cd myproject
pipreqs . --force

Inspect.getmembers() vs dir()

dir(Class) donne la liste des fonctions inspect.getmembers(Class) donne la liste des fonctions avec leurs arguments

python 2 vs python 3

fstrings

Easiest method ever for string rendering

1
2
myvar = 1234
f'myvar is {myvar}'

on peut mettre des expressions dans le string

1
2
myvar = 1234
f'myvar is {myvar+200}'

Autres

python 3.7 dataclass