Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30

Модули для Python на Си

07.02.2017, 15:18. Показов 4302. Ответов 14

Студворк — интернет-сервис помощи студентам
Подскажите литературу по написанию модулей для Python на С/С++ ( Си API)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2017, 15:18
Ответы с готовыми решениями:

Не получается установить модули для Python
Не получается установить модули. Вот такое выходит после строки pip install Django . Как быть?

Модули python в apk
Python Kivy. Хочу использовать в андроид-приложении модуль pyowm к примеру (без этого приложение на смартфоне крашится), только не знаю как...

Не устанавливаются модули (библиотеки) на Python
Использую стандартную среду разработки питон. Устанавливал одну и ту же библиотеку(pybrain) тремя разными способами: pip, easy install,...

14
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
08.02.2017, 13:24
Стесняюсь спросить, а официальной доки недостаточно?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.02.2017, 13:31  [ТС]
Имею ввиду именно литературу, книги на русском...
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
08.02.2017, 13:53
Вот что мне гугль выдал сходу
https://habrahabr.ru/post/44520/
https://lancelote.gitbooks.io/... nsion.html

ПММ, тема не такая объёмная, чтобы написать целую книгу.
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.02.2017, 18:40  [ТС]
Да я читал некоторые статьи, но они не прояснили дело.
Авторы пишут как правило размыто, не объясняя детали того как это правильно делать, вместо этого приводят какие-то упрощенные примеры, вместо того что бы объяснять общие принципы/схему.

Добавлено через 3 часа 32 минуты
К примеру я взял пример из https://lancelote.gitbooks.io/... nsion.html

Модифицировал его под python3
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <Python.h>
 
 
// Эту функцию мы вызываем из Python кода
static PyObject* addList_add(PyObject* self, PyObject* args)
{
 
  PyObject * listObj;
 
  // Входящие аргументы находятся в кортеже
  // В нашем случае есть только один аргумент - список, на который мы будем
  // ссылаться как listObj
  if (! PyArg_ParseTuple( args, "O", &listObj))
    return NULL;
 
  // Длина списка
  long length = PyList_Size(listObj);
 
  // Проходимся по всем элементам
  int i, sum =0;
  for(i = 0; i < length; i++){
    // Получаем элемент из списка - он также Python-объект
    PyObject* temp = PyList_GetItem(listObj, i);
    // Мы знаем, что элемент это целое число - приводим его к типу C long
    long elem = PyLong_AsLong(temp);
    sum += elem;
  }
 
  // Возвращаемое в Python-код значение также Python-объект
  // Приводим C long к Python integer
  return Py_BuildValue("i", sum);
}
 
// Немного документации для `add`
static char addList_docs[] =
    "add( ): add all elements of the list\n";
 
/*
Эта таблица содержит необходимую информацию о функциях модуля
<имя функции в модуле Python>, <фактическая функция>,
<ожидаемые типы аргументов функции>, <документация функции>
*/
static PyMethodDef addList_funcs[] = {
    {"add", (PyCFunction)addList_add, METH_VARARGS, addList_docs},
    {NULL, NULL, 0, NULL}
};
 
/*
addList имя модуля и это блок его инициализации.
<желаемое имя модуля>, <таблица информации>, <документация модуля>
*/
 
static struct PyModuleDef cModPyDem =
{
    PyModuleDef_HEAD_INIT,
    "addList", /* name of module */
    "Add all ze lists",          /* module documentation, may be NULL */
    -1,          /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */
    addList_funcs
};
 
PyMODINIT_FUNC initaddList(void)
{
   return PyModule_Create(&cModPyDem);
}


Скомпилил в MSVC2010 получил addList.dll в той же папке создал скрипт для проверки

Python
1
2
3
4
import addList
 
l = [1, 2, 3, 4, 5]
print("Сумма элементов списка - " + str(l) + " = " + str(addList.add(l)))
Запуска: не видит модуль пишет:

import addList
ImportError: No module named 'addList'
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
08.02.2017, 20:46
Переименовать в addList.pyd?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.02.2017, 21:42  [ТС]
Цитата Сообщение от shsv Посмотреть сообщение
Переименовать в addList.pyd?
Да так работает.
(блин ну и выдумают же.)
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.02.2017, 22:05
Avazart,
Побочный вопрос: с cython'ом не пробовали экспериментировать?
Не как с языком (хотя, если изучить - то можно и модули на нем писать - почти как на python, но в конечном итоге - тот же Си на выходе), а как с модулем для прямой трансляции python кода в pyd. Определенное подмножество скриптов (отнюдь не хэлловордов) на python он вполне себе транслирует в Си, а затем в рабочий pyd.
Но, увы, на некоторых выдает ошибки синтаксиса - хотя, вроде как является надмножеством над python. В любом случае - тоже неплохая тема для попробовать и поэкспериментировать:-)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.02.2017, 22:09  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Побочный вопрос: с cython'ом не пробовали экспериментировать?
Не охота пока лезть, не особо интересует автоматическая генерация, дополнительные затраты на изучение лучше сразу на С. Есть планы еще посмотреть обвертку C++ boost/python

shsv, А есть ли способ загрузить с dll расширением, ведь как то грузятся длл-ки от Qt ?
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
09.02.2017, 12:55
Пишут, что наряду с module.pyd импортируется и module.dll, если первый не найден. Однако, у меня ни разу не получилось (не считая жутковатого способа с importlib.machinery и ExtensionFileLoader). Так что я бы и сам хотел знать...
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
11.02.2017, 23:31
Вобщем из
importlib.machinery.all_suffixes()
Returns a combined list of strings representing all file suffixes for modules recognized by the standard import machinery.
и
Python
1
2
>>> importlib.machinery.all_suffixes()
['.py', '.pyw', '.pyc', '.pyd']
следует, что import таки не видит модули с dll расширением, и, похоже, жутковатый ExtensionFileLoader - единственный способ загрузить такой модуль (внутри он использует встроенный _imp.load_dynamic(modulename, path))

Python
1
2
3
from importlib.machinery import ExtensionFileLoader
 
addList = ExtensionFileLoader("addList", r"c:\addList.dll").load_module()
(проще поменять расширение)
1
56 / 56 / 31
Регистрация: 24.10.2016
Сообщений: 186
12.02.2017, 00:19
Цитата Сообщение от Avazart Посмотреть сообщение
А есть ли способ загрузить с dll расширением, ведь как то грузятся длл-ки от Qt ?
Можно любую дллку грузить через ctypes, но для того чтоб ее заставить нормально работать, нужно как минимум описать на питоне функции, экспортируемые из длл, и структуры, используемые этими функциями. Так к примеру работают биндинг SDL и wxPython.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.02.2017, 01:04  [ТС]
Цитата Сообщение от OlafNestandart Посмотреть сообщение
Можно любую дллку грузить через ctypes,
Да но как мне кажется очень морочно в сравнении с API.
Кроме того Qt это С++ библиотека.
0
56 / 56 / 31
Регистрация: 24.10.2016
Сообщений: 186
12.02.2017, 10:28
Цитата Сообщение от Avazart Посмотреть сообщение
Да но как мне кажется очень морочно в сравнении с API.
Кроме того Qt это С++ библиотека.
Ну так и wxWidgets тоже C++ библиотека. Люди просто заморочились с враперами через ctypes, где вручную писали, где генерили через swig - ctypes поддерживает thiscall, имена можно продеманглить, что еще нужно для счастья. Но да, геморно это.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.02.2017, 15:44  [ТС]
Ну в Qt много своих типов например QString которые не являются "простыми", как я понимаю с этим ctypes не справиться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2017, 15:44
Помогаю со студенческими работами здесь

Где изучать модули python
Если кто-то знает прекрасную литературу, которая в полной мере объясняет модули python, все основные (os, sys, socket, threading и иные) в...

Подгрузить все модули Python
Вопрос - как подгрузить все достпные модули питона?

Как удобнее создавать и вставлять модули Python?
Здравствуйте, основная папка, в которой я работаю, находится на диске D, а папка с модулями на диске C. Если я запилил модуль, но потом мне...

Фантастические твари (Модули), и где они обитают в Python
Фантастические твари(Модули), и где они обитают в Python Вопрос такой такой , есть допустим Python 3.7.8 в папке что рядом , не...

Не устанавливаются модули на сервер - invalid syntax, ssl module in Python is not available
centos 6 запускаю питон через алиас python3.8, так как на сервере уже есть 2 версия. pip install pandas - инвалид синтакс pip3...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru