Форум программистов, компьютерный форум, киберфорум
Python: IDE, инструментарий
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491

Добавить расширение файла для импорта (к .pyd добавить .dll)

01.09.2020, 05:47. Показов 3483. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе утро,

Я компилирую динамическую библиотеку в С++, которая получает расширение .dll. Затем с помощью утилиты я делаю эту динамическую библиотеку доступной для питона.
Проблема в том, что питоновский import mymodule подразумевает, что mymodule имеет расширение .pyd. Чтобы не приходилось вручную менять расширение с .dll на .pyd, хотелось бы чтобы питон распознавал также .dll расширение (именно не сменить расширение, а добавить).

Возможно ли это сделать? Подразумеваю что надо использовать python-config

Windows 10
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2020, 05:47
Ответы с готовыми решениями:

Как добавить свою dll в таблицу импорта
Добрый день. Подскажите пожалуйста, как добавить dll(свою) в таблицу импорта своей программы написанной на c++. Чтобы я смог увидеть...

Добавить расширение к имени файла
т.е. чтобы постоянно не писать его в программе... void vvod(char name) { char dat=".dat"; fstream FileOutput; ...

Добавить расширение файла в список скрытых
Как добавить расширение в список скрытых файлов? Одна используемая мной программа создаёт в рабочей папке вспомогательные файлы по одному...

10
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
01.09.2020, 07:40
Kerim_Geophysic, не знаю что ты там делаешь доступным для питона и как, но чтобы использовать dll хватит простого модуля ctypes.
1
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
01.09.2020, 14:55
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
хотелось бы чтобы питон распознавал также .dll расширение
Python
1
2
3
4
>>> import importlib
>>> importlib.machinery.all_suffixes()
['.py', '.pyw', '.pyc', '.cp38-win_amd64.pyd', '.pyd']
>>>
Хотелку можно адресовать Гвидо, чтобы он исправил встроенную библиотеку.
Но Гвидо уже отошел от дел...

P.S. Разумеется в importlib есть возможность добавить свою dll, но проще сменить расширение.
1
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
01.09.2020, 18:26
Правильный подход - ставить расширение pyd. pyd - Это указатель на то, что либа является именно питоновским модулем. И, как и всякий правильный подход, реализуется проще, чем неправильный.
1
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
01.09.2020, 18:37  [ТС]
DmFat, ctypes не подходит, я решил использовать pybind11
dondublon, я догадываюсь, но как мне решить проблему: я компилирую в С++ динамическую библиотеку, которую можно использовать в С++ (.dll) и в питоне через import mylib (здесь она должна быть с расширением .pyd).
Очень не хотелось бы после компиляции библиотеки в С++ копировать ее и одну из копий переименовывать в .pyd
В моем проекте это должна быть библиотека общая для питона и С++

Есть ли идеи как поступить?

Добавлено через 3 минуты
Garry Galler, пытаюсь так сделать:
Python
1
2
3
4
5
import importlib
importlib.machinery.SOURCE_SUFFIXES.append('.dll')
importlib.machinery.all_suffixes()
['.py', '.pyw', '.dll', '.pyc', '.cp38-win_amd64.pyd', '.pyd']
import PyBind11_proba    # моя .dll, import PyBind11_proba.dll тоже не работает
но получаю ошибку:
Traceback (most recent call last):
File "C:\Anaconda3\envs\MyEnv38\lib\site-packages\IPython\core\interactiveshell.p y", line 3417, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-5-7554b7aab515>", line 1, in <module>
import PyBind11_proba
File "C:\Program Files\JetBrains\PyCharm 2020.1\plugins\python\helpers\pydev\_pyd ev_bundle\pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
ModuleNotFoundError: No module named 'PyBind11_proba'
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
01.09.2020, 18:39
Лучший ответ Сообщение было отмечено Kerim_Geophysic как решение

Решение

Python
1
2
from importlib.machinery ExtensionFileLoader
ExtensionFileLoader("addList", r"c:\addList.dll").load_module()
P.S. Это вариант предложенный shsv. По его же мнению другого способа нет или, по меньшей мере, никто его не знает.
1
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
01.09.2020, 18:41
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
Очень не хотелось бы после компиляции библиотеки в С++ копировать ее и одну из копий переименовывать в .pyd
Не знаю, как в вашем случае, но вообще в обычных проектах visual studio имя либы задаётся в настройках проекта. Укажите там .pyd и всё. Если не VS - то тоже наверняка должно настраиваться.
1
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
01.09.2020, 19:04  [ТС]
Garry Galler, спасибо, сейчас работает:
Python
1
2
3
from importlib.machinery import ExtensionFileLoader
myvar = ExtensionFileLoader("PyBind11_proba", r"PyBind11_proba.dll").load_module()
myvar.add(2,1)    # add(int i, int j) моя функция
Где можно почитать про ExtensionFileLoader? в Гугле пишу "ExtensionFileLoader python" ничего не находит. Мне просто не понятен синтаксис, а именно первый аргумент ("PyBind11_proba", r"PyBind11_proba.dll") для чего? я не могу вызвать мою функцию так:
Python
1
PyBind11_proba.add(2,1)    # получу ошибку
Добавлено через 56 секунд
dondublon, спасибо, надо поискать как это делается в Qt
Оба варианта рассматриваю .dll -> .pyd или оставить расширение как .dll
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
01.09.2020, 19:12
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
Мне просто не понятен синтаксис, а именно первый аргумент
importlib.machinery.ExtensionFileLoader( fullname, path)
The fullname argument specifies the name of the module the loader is to support. The path argument is the path to the extension module’s file.
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
в Гугле пишу "ExtensionFileLoader python" ничего не находит
Оф. дока + исходники CPython.
-------------------------------
Можно же так писать:
Python
1
PyBind11_proba = ExtensionFileLoader("PyBind11_proba", r"PyBind11_proba.dll").load_module()
1
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
01.09.2020, 19:46
Kerim_Geophysic, Qt - это, вроде, не компилятор и не система сборки.
99%, что у вас VS либо gcc в каком-то виде, часто идёт с cmake. Надо там искать.
1
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 491
01.09.2020, 23:45  [ТС]
dondublon, я имел ввиду, что разбираться придется с QMake (аналог СМаке, но в Qt)
А так да, компилятор вужуал студо MSVC 2017 x64, работаю на видоус
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.09.2020, 23:45
Помогаю со студенческими работами здесь

Как добавить новое расширение файла - в контекстное меню Тotal Commander
total commander Подскажите как добавить новое расширение файла - в контекстное меню Тотал Коммандера ? Это там, где надо выбрать...

Как добавить расширение для монитора 1440х900
Помогите добавить расширение для монитора Samsung SyncMaster 920nw ПК Dell Optiplex 755 как мне помнится там максимальное расширение...

Добавить запись в таблицу импорта
Необходимо в таблицу импорта dll добавить новую запись об импортируемой функции. Я прочитал статью как это сделать (кому интересно вот она...

Правила dll и добавление в таблицу импорта exe файла
Добрый вечер! Такая ситуация: Написал dll, включил ее в проект под vs 2010 - всё работает. Написал редактор таблицы импорта, добавил...

Добавить макет в расширение
БП 3.0 Добавил макет акта о работах счет на оплату, отредактировал как надо все ок. Добавил УПД, ТОРГ12 он все ровно подхватывает макеты из...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru