LINUX.ORG.RU

Python + C-шные библиотеки


0

1

Собираюсь заняться прикладным программированием. Выбрал язык - python, потому что у него есть PyGTK и просто в изучении.

Уже задумал, что я хочу в первую очередь написать (то ради чего я вообще собираюсь лезть в область прикладного программирования). Собственно пока только начинаю разбираться с фундаментальными вещами, поэтому ждите новых «глупых и легких» вопросов. Внимание, первый вопрос:

Может ли python использовать C-шные библиотеки, например такие как gupnp? Как это делается? Нужны какие-либо хаки, или их можно использовать «нативно»?

★★★

ctypes, биндинги

anonymous
()

Можно использовать модуль ctypes, это проще всего. Можно писать обертки на чистом Си, можно на всяких Pyrex и Cython. Второй способ примечателен тем, что можно написать довольно быструю и сложную обертку. С помощью ctypes получается тонкая обертка функция-в-функцию.

buddhist ★★★★★
()
Ответ на: комментарий от oRLaN

Вот новый ресурс по PyGTK, там перевод туториала. http://pygtk.ru/ Может пригодиться.

Спасибо. Ещё как пригодится.

VirRaa ★★★
() автор топика
#include <iostream>

class Foo{
    public:
        void bar(){
            std::cout << "Hello" << std::endl;
        }
};

extern "C" {
    Foo* Foo_new(){ return new Foo(); }
    void Foo_bar(Foo* foo){ foo->bar(); }
}
g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so  foo.o
import os
from ctypes import cdll

lib = cdll.LoadLibrary( "".join([(os.getcwd()), ("/libfoo.so")]) )

class cpp(object):
    def __init__(self):
        self.obj = lib.Foo_new()

    def bar(self):
        lib.Foo_bar(self.obj)
nCdy
()

Как это делается?

Есть какой-то GObjectIntrospection. В теории любая GObject библиотека (в т.ч. и gupnp) может работать с питоном. Но это лишь в теории.

stack_protector
()
Ответ на: комментарий от oRLaN

Вот новый ресурс по PyGTK

4.1. Теория коробок
4.2. Детали коробок
4.3. Демонстрационная программа компоновки
4.4. Использование таблиц для компоновки
4.5. Пример табличной компоновки

Гм. ТС, я бы на твоем месте не радовался.

baverman ★★★
()

Может ли python использовать C-шные библиотеки, например такие как gupnp?

Конкретно для gupnp привязки уже есть, через gir. Правда там не протащено около двух десятков функций, не знаю насколько критичных.

baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.