• Nie Znaleziono Wyników

C API, virtualenv i inne

N/A
N/A
Protected

Academic year: 2021

Share "C API, virtualenv i inne"

Copied!
40
0
0

Pełen tekst

(1)

Kurs rozszerzony języka Python

Inne języki

Marcin Młotkowski

(2)

Plan wykładu

1 Python

Implementacje języka Python C API

Osadzanie Pythona w C

2 Warianty środowiska

(3)

Python

Warianty środowiska Dystrybucja pakietów

Implementacje języka Python C API

Osadzanie Pythona w C

Plan wykładu

1 Python

Implementacje języka Python C API

Osadzanie Pythona w C

2 Warianty środowiska

(4)

Kanoniczna implementacja

CPython

(5)

Python

Warianty środowiska Dystrybucja pakietów

Implementacje języka Python C API

Osadzanie 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;

(6)

Stackless Python

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

dostępny w CPythonie jako greenlet;

(7)

Python

Warianty środowiska Dystrybucja pakietów

Implementacje języka Python C API

Osadzanie 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.

(8)

IronPython

Implementacja Pythona w środowisku Mono i .NET; zgodny z Pythonem 2.7.9, choć są niezgodności.

(9)

Python

Warianty środowiska Dystrybucja pakietów

Implementacje języka Python C API

Osadzanie 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.

(10)

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;

(11)

Python

Warianty środowiska Dystrybucja pakietów

Implementacje języka Python C API

Osadzanie 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.

(12)

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.

(13)

Python

Warianty środowiska Dystrybucja pakietów

Implementacje języka Python C API

Osadzanie Pythona w C

Implementacja funkcji

externPyObject * 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)) returnNULL;

if (!PyList Check(lista)) printf(”To nie jest lista!\n”); n = PyList Size(lista);

(14)

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);

returnres; }

(15)

Python

Warianty środowiska Dystrybucja pakietów

Implementacje języka Python C API

Osadzanie Pythona w C

Opakowanie funkcji

#include<python3.5/Python.h>

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

(16)

Deklaracje modułu

staticPyMethodDef 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) {

returnPyModule Create(&moduledef); }

(17)

Python

Warianty środowiska Dystrybucja pakietów

Implementacje języka Python C API

Osadzanie Pythona w C

Kompilacja i instalacja

setup.py

fromdistutils.core importsetup, Extension

modul = 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

(18)

Typy danych w Pythonie

(19)

Python

Warianty środowiska Dystrybucja pakietów

Implementacje języka Python C API

Osadzanie Pythona w C

Zarządzanie pamięcią

Mechanizm zarządzania pamięcią

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

Jeśli licznik jest równy zero obiekt jest usuwany z pamięci. W programach w C trzeba dbać o aktualizację licznika.

(20)

Zmiana licznika odwołań

Zwiększenie licznika

void Py INCREF(PyObject *o) Zmniejszenie licznika

(21)

Python

Warianty środowiska Dystrybucja pakietów

Implementacje języka Python C API Osadzanie Pythona w C

Trochę łatwiej

Biblioteka Boost: + łączenie Pythona z C++ + łatwiejsza od C API

(22)

Wykonanie programów Pythonowych

Py Initialize();

PyRun SimpleString(”i = 2”);

PyRun SimpleString(”i = i*i\nprint(i)”); Py Finalize();

(23)

Python

Warianty środowiska Dystrybucja pakietów

Implementacje języka Python C API

Osadzanie Pythona w C

Wykonanie programów w pliku

Py Initialize();

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

(24)

Kompilacja

(25)

Python

Warianty środowiska Dystrybucja pakietów

Implementacje języka Python C API

Osadzanie 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”);

(26)

Plan wykładu

1 Python

Implementacje języka Python C API

Osadzanie Pythona w C

2 Warianty środowiska

(27)

Python

Warianty środowiska

Dystrybucja pakietów

Lokalne środowisko Pythonowe

virtualenv

Tworzy w lokalnym katalogu pełną wersję środowsika

pythonowego, którą można modyfikować niezależnie od głównej instalacji. Można mieć wiele takich wirtualnych środowisk.

$ virtualenv --system-site-packages $HOME/mojesrodowisko $ cd $HOME/mojesrodowisko/

(28)

Lokalne środowisko Pythonowe

virtualenv

Tworzy w lokalnym katalogu pełną wersję środowsika

pythonowego, którą można modyfikować niezależnie od głównej instalacji. Można mieć wiele takich wirtualnych środowisk.

$ virtualenv --system-site-packages $HOME/mojesrodowisko $ cd $HOME/mojesrodowisko/

(29)

Python

Warianty środowiska

Dystrybucja pakietów

(30)

jupyter

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

(31)

Python Warianty środowiska

Dystrybucja pakietów

Plan wykładu

1 Python

Implementacje języka Python C API

Osadzanie Pythona w C

2 Warianty środowiska

(32)

Python Warianty środowiska

Dystrybucja pakietów

Formaty

egg: stary format; wheel: aktualny.

(33)

Python Warianty środowiska

Dystrybucja pakietów

Formaty

egg: stary format; wheel: aktualny. Instalacja pakietów pip

(34)

Python Warianty środowiska

Dystrybucja pakietów

Dystrybucja programów

Cyton: wygenerowanie kodu w C i kompilacja; Nuitka: generowanie kodu C++;

(35)

Python Warianty środowiska

Dystrybucja pakietów

Dystrybucja programów

Cyton: wygenerowanie kodu w C i kompilacja; Nuitka: generowanie kodu C++;

(36)

Python Warianty środowiska

Dystrybucja pakietów

A bez kompilacji

Skompresować pliki do zip’a!

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 to początek programu.

(37)

Python Warianty środowiska

Dystrybucja 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 to początek programu.

(38)

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 to początek programu.

(39)

Python Warianty środowiska Dystrybucja pakietów

Plan wykładu

1 Python

Implementacje języka Python C API

Osadzanie Pythona w C

2 Warianty środowiska

(40)

Cytaty

Powiązane dokumenty

[r]

Efektem działania obu postaci operatora jest zwiększenie wartości obiektu o jeden, postaci te różnią się wartością zwracaną, co ma znaczenie,

 Wielkość liter w nazwach jest istotna.Nazwy nie mogą się zaczynać od cyfry..

Також варто звернути увагу на те, що хоча українці і вказують на більшу кількість джерел, ніж поляки, що свідчить про

2. Każdy zakup produktów, objętych sprzedażą premiową w składach budowlanych Organizatora premiowany jest Punkta- mi, w liczbie 1 Punkt za każdy zakup towarów przez Uczestnika

›oª adek Complex algebrai plane urves via Poin aréHopf

3) Zapisz w odpowiedni sposób i wyślij na swoją pocztę tak aby można je było otworzyć na lekcji. a) Wyeksportuj jako grafikę JPEG (plik z rozszerzeniem *.jpg). b)

Arithmetical properties of lacunary sets, in particular Sidon sets, in discrete abelian groups received a great attention during the sixties and seventies (see [9] and [30])..