40
Kurs rozszerzony języka Python Inne języki Marcin Mlotkowski 29 stycznia 2020

Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

Kurs rozszerzony języka PythonInne języki

Marcin Młotkowski

29 stycznia 2020

Page 2: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Plan wykładu

1 PythonImplementacje języka PythonC APIOsadzanie Pythona w C

2 Warianty środowiska

3 Dystrybucja pakietów

Marcin Młotkowski Kurs rozszerzony języka Python

Page 3: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Plan wykładu

1 PythonImplementacje języka PythonC APIOsadzanie Pythona w C

2 Warianty środowiska

3 Dystrybucja pakietów

Marcin Młotkowski Kurs rozszerzony języka Python

Page 4: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Kanoniczna implementacja

CPython

Podstawowa implementacja języka Python w C.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 5: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

PyPy

jit compilation;

wysoka zgodność z Pythonem 2.7 i 3.6;

możliwość dołączania własnego odśmiecacza pamięci;

wsparcie dla greenletów i stackless;

nieco inne zarządzanie pamięcią.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 6: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Stackless Python

interpreter oparty na mikrowątkach realizowanych przezinterpreter, nie przez kernel;

dostępny w CPythonie jako greenlet;

stackless bo unika korzystania ze stosu wywołań C.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 7: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Jython

Cechy Jythona

implementacja Pythona na maszynę wirtualną Javy;

kompilacja do plików .class;

dostęp do bibliotek Javy;

zgodny z Python 2.7.1.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 8: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

IronPython

Implementacja Pythona w środowisku Mono i .NET;

zgodny z Pythonem 2.7.9, choć są niezgodności.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 9: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Python for S60

Implementacja Nokii na tefony komórkowe z systemem Symbian 60

implementacja Python wersji 2.2.2;

dostęp do sprzętu (SMS’y, siła sygnału, nagrywanie video,wykonywanie i odbieranie połączeń);

wsparcie dla GPRS i Bluetooth;

dostęp do 2D API i OpenGL.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 10: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Problemy łączenia dwóch języków

Zagadnienia

problemy z różnymi typami danych (listy, kolekcje, napisy);

przekazywanie argumentów i zwracanie wartości;

tworzenie nowych wartości;

obsługa wyjątków;

zarządzanie pamięcią.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 11: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Dodanie do Pythona nowej funkcji

Zadanie

Moduł z funkcją obliczającą średnią arytmetyczną elementów listy.

Elementy implementacji:

plik nagłówkowy <Python.h>;

implementacja funkcji;

odwzorowanie funkcji w C na nazwę udostępnioną w Pythonie;

funkcja inicjalizująca o nazwie initnazwa modułu.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 12: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Dodanie do Pythona nowej funkcji

Zadanie

Moduł z funkcją obliczającą średnią arytmetyczną elementów listy.

Elementy implementacji:

plik nagłówkowy <Python.h>;

implementacja funkcji;

odwzorowanie funkcji w C na nazwę udostępnioną w Pythonie;

funkcja inicjalizująca o nazwie initnazwa modułu.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 13: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Implementacja funkcji

extern PyObject * mean(PyObject *, PyObject *);

PyObject * mean(PyObject * self, PyObject * args){

PyObject * res;PyObject * item;PyObject * lista;Py ssize t n;if (!PyArg ParseTuple(args, ”O”, &lista)) return NULL;if (!PyList Check(lista)) printf(”To nie jest lista!\n”);n = PyList Size(lista);

Marcin Młotkowski Kurs rozszerzony języka Python

Page 14: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Implementacja, cd.

cd. funkcji

for (i = 0; i < n; i++) {item = PyList GetItem(lista, i);if (!PyLong Check(item)) continue;suma += PyInt AsLong(item);

}res = Py BuildValue(”i”, suma/n);Py INCREF(res);return res;

}

Marcin Młotkowski Kurs rozszerzony języka Python

Page 15: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Opakowanie funkcji

#include <python3.5/Python.h>

extern PyObject * mean(PyObject *, PyObject *);

PyObject * mean(PyObject * self, PyObject * args){ ... }

Marcin Młotkowski Kurs rozszerzony języka Python

Page 16: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Deklaracje modułu

static PyMethodDef funkcje[ ] = {{ ”mean”, mean, METH VARARGS, ”Pierwsza funkcja” },{ NULL, NULL, -1, NULL }

};

static PyModuleDef moduledef = {PyModuleDef HEAD INIT, ”modulik”, ”Opis modułu”,-1, funkcje, NULL, NULL, NULL, NULL,

};

PyMODINIT FUNC PyInit modulik(void) {return PyModule Create(&moduledef);

}

Marcin Młotkowski Kurs rozszerzony języka Python

Page 17: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Kompilacja i instalacja

setup.py

from distutils.core import setup, Extensionmodul = Extension(’modulik’, sources = [’test.c’])setup(name = ”MyPackage”,

version = ’0.1’,description = ’Demonstracja C API’,ext modules = [modul])

Kompilacja i instalacja

$ python setup.py build$ python setup.py install

Marcin Młotkowski Kurs rozszerzony języka Python

Page 18: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Typy danych w Pythonie

Wszystko w Pythonie jest obiektem

Marcin Młotkowski Kurs rozszerzony języka Python

Page 19: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Zarządzanie pamięcią

Mechanizm zarządzania pamięcią

Każdy obiekt ma licznik odwołań zwiększany za każdymprzypisaniem.

Jeśli licznik jest równy zero obiekt jest usuwany z pamięci.

W programach w C trzeba dbać o aktualizację licznika.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 20: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Zmiana licznika odwołań

Zwiększenie licznika

void Py INCREF(PyObject *o)

Zmniejszenie licznika

void Py DECREF(PyObject *o)

Marcin Młotkowski Kurs rozszerzony języka Python

Page 21: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Trochę łatwiej

Biblioteka Boost:

+ łączenie Pythona z C++

+ łatwiejsza od C API

- czasem nie da się ominąć C API (ale się rozwija)

Marcin Młotkowski Kurs rozszerzony języka Python

Page 22: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Wykonanie programów Pythonowych

Py Initialize();

PyRun SimpleString(”i = 2”);PyRun SimpleString(”i = i*i\nprint(i)”);

Py Finalize();

Marcin Młotkowski Kurs rozszerzony języka Python

Page 23: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Wykonanie programów w pliku

Py Initialize();FILE * f = fopen(”test.py”, ”r”);PyRun SimpleFile(f, ”test.py”);Py Finalize();

Marcin Młotkowski Kurs rozszerzony języka Python

Page 24: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Kompilacja

gcc -lpython3.5 test.c

Marcin Młotkowski Kurs rozszerzony języka Python

Page 25: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Implementacje języka PythonC APIOsadzanie Pythona w C

Bezpośrednie wywoływanie funkcji Pythonowych

Deklaracja zmiennych

PyObject *pName, *pModule, *pArgs, *pFunc, *pValue;

Import modułu Pythonowego

Py Initialize();pName = PyString FromString(”modulik”);pModule = PyImport Import(pName);

Pobranie funkcji z modułu

pFunc = PyObject GetAttrString(pModule, ”foo”);

Wywołanie funkcji

pValue = PyObject CallObject(pFunc, pArgs);

Marcin Młotkowski Kurs rozszerzony języka Python

Page 26: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Plan wykładu

1 PythonImplementacje języka PythonC APIOsadzanie Pythona w C

2 Warianty środowiska

3 Dystrybucja pakietów

Marcin Młotkowski Kurs rozszerzony języka Python

Page 27: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Lokalne środowisko Pythonowe

virtualenv

Tworzy w lokalnym katalogu pełną wersję środowsikapythonowego, którą można modyfikować niezależnie od głównejinstalacji. Można mieć wiele takich wirtualnych środowisk.

$ virtualenv --system-site-packages $HOME/mojesrodowisko$ cd $HOME/mojesrodowisko/$ source bin/activate

Marcin Młotkowski Kurs rozszerzony języka Python

Page 28: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Lokalne środowisko Pythonowe

virtualenv

Tworzy w lokalnym katalogu pełną wersję środowsikapythonowego, którą można modyfikować niezależnie od głównejinstalacji. Można mieć wiele takich wirtualnych środowisk.

$ virtualenv --system-site-packages $HOME/mojesrodowisko$ cd $HOME/mojesrodowisko/$ source bin/activate

Marcin Młotkowski Kurs rozszerzony języka Python

Page 29: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Przykład

Marcin Młotkowski Kurs rozszerzony języka Python

Page 30: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

jupyter

Interaktywne środowisko do analizy danych i obliczeń naukowych,np. w pythonie.

Przykład Pawła Rychlikowskiego

Marcin Młotkowski Kurs rozszerzony języka Python

Page 31: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Plan wykładu

1 PythonImplementacje języka PythonC APIOsadzanie Pythona w C

2 Warianty środowiska

3 Dystrybucja pakietów

Marcin Młotkowski Kurs rozszerzony języka Python

Page 32: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Formaty

egg: stary format;

wheel: aktualny.

Instalacja pakietów

pip

Marcin Młotkowski Kurs rozszerzony języka Python

Page 33: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Formaty

egg: stary format;

wheel: aktualny.

Instalacja pakietów

pip

Marcin Młotkowski Kurs rozszerzony języka Python

Page 34: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Dystrybucja programów

Cyton: wygenerowanie kodu w C i kompilacja;

Nuitka: generowanie kodu C++;

inne, np. py2exe

Marcin Młotkowski Kurs rozszerzony języka Python

Page 35: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Dystrybucja programów

Cyton: wygenerowanie kodu w C i kompilacja;

Nuitka: generowanie kodu C++;

inne, np. py2exe

Marcin Młotkowski Kurs rozszerzony języka Python

Page 36: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

A bez kompilacji

Skompresować pliki do zip’a!

1. sposób

Plik początkowy nazwać main .py i skompresować cały projekt.

2. sposób

$ python3 -m zipapp apka -m ’’apka:startapp’’gdzie apka to katalog z plikami, a plik apka/startapp.py topoczątek programu.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 37: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

A bez kompilacji

Skompresować pliki do zip’a!

1. sposób

Plik początkowy nazwać main .py i skompresować cały projekt.

2. sposób

$ python3 -m zipapp apka -m ’’apka:startapp’’gdzie apka to katalog z plikami, a plik apka/startapp.py topoczątek programu.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 38: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

A bez kompilacji

Skompresować pliki do zip’a!

1. sposób

Plik początkowy nazwać main .py i skompresować cały projekt.

2. sposób

$ python3 -m zipapp apka -m ’’apka:startapp’’gdzie apka to katalog z plikami, a plik apka/startapp.py topoczątek programu.

Marcin Młotkowski Kurs rozszerzony języka Python

Page 39: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python

PythonWarianty środowiskaDystrybucja pakietów

Plan wykładu

1 PythonImplementacje języka PythonC APIOsadzanie Pythona w C

2 Warianty środowiska

3 Dystrybucja pakietów

Marcin Młotkowski Kurs rozszerzony języka Python

Page 40: Kurs rozszerzony jezyka Pythonmarcinm/dyd/python/ostatni.pdf · Typy danych w Pythonie Wszystko w Pythonie jest obiektem Marcin Młotkowski Kurs rozszerzony języka Python. Python