- 4. Building C and C++ Extensions¶
- 4.1. Building C and C++ Extensions with distutils¶
- 4.2. Distributing your extension modules¶
- Расширение файла PYD
- Содержимое файлов PYD — динамический модуль Python?
- Программы, которые поддерживают PYD расширение файла
- Программы, обслуживающие файл PYD
- Как открыть файл PYD?
- Шаг 1. Скачайте и установите Foundation Python
- Шаг 2. Проверьте версию Foundation Python и обновите при необходимости
- Шаг 3. Назначьте Foundation Python для PYD файлов
- Шаг 4. Убедитесь, что PYD не неисправен
4. Building C and C++ Extensions¶
A C extension for CPython is a shared library (e.g. a .so file on Linux, .pyd on Windows), which exports an initialization function.
To be importable, the shared library must be available on PYTHONPATH , and must be named after the module name, with an appropriate extension. When using distutils, the correct filename is generated automatically.
The initialization function has the signature:
It returns either a fully initialized module, or a PyModuleDef instance. See Initializing C modules for details.
For modules with ASCII-only names, the function must be named PyInit_ , with replaced by the name of the module. When using Multi-phase initialization , non-ASCII module names are allowed. In this case, the initialization function name is PyInitU_ , with encoded using Python’s punycode encoding with hyphens replaced by underscores. In Python:
def initfunc_name(name): try: suffix = b'_' + name.encode('ascii') except UnicodeEncodeError: suffix = b'U_' + name.encode('punycode').replace(b'-', b'_') return b'PyInit' + suffix
It is possible to export multiple modules from a single shared library by defining multiple initialization functions. However, importing them requires using symbolic links or a custom importer, because by default only the function corresponding to the filename is found. See the “Multiple modules in one library” section in PEP 489 for details.
4.1. Building C and C++ Extensions with distutils¶
Extension modules can be built using distutils, which is included in Python. Since distutils also supports creation of binary packages, users don’t necessarily need a compiler and distutils to install the extension.
A distutils package contains a driver script, setup.py . This is a plain Python file, which, in the most simple case, could look like this:
from distutils.core import setup, Extension module1 = Extension('demo', sources = ['demo.c']) setup (name = 'PackageName', version = '1.0', description = 'This is a demo package', ext_modules = [module1])
With this setup.py , and a file demo.c , running
will compile demo.c , and produce an extension module named demo in the build directory. Depending on the system, the module file will end up in a subdirectory build/lib.system , and may have a name like demo.so or demo.pyd .
In the setup.py , all execution is performed by calling the setup function. This takes a variable number of keyword arguments, of which the example above uses only a subset. Specifically, the example specifies meta-information to build packages, and it specifies the contents of the package. Normally, a package will contain additional modules, like Python source modules, documentation, subpackages, etc. Please refer to the distutils documentation in Distributing Python Modules (Legacy version) to learn more about the features of distutils; this section explains building extension modules only.
It is common to pre-compute arguments to setup() , to better structure the driver script. In the example above, the ext_modules argument to setup() is a list of extension modules, each of which is an instance of the Extension . In the example, the instance defines an extension named demo which is build by compiling a single source file, demo.c .
In many cases, building an extension is more complex, since additional preprocessor defines and libraries may be needed. This is demonstrated in the example below.
from distutils.core import setup, Extension module1 = Extension('demo', define_macros = [('MAJOR_VERSION', '1'), ('MINOR_VERSION', '0')], include_dirs = ['/usr/local/include'], libraries = ['tcl83'], library_dirs = ['/usr/local/lib'], sources = ['demo.c']) setup (name = 'PackageName', version = '1.0', description = 'This is a demo package', author = 'Martin v. Loewis', author_email = 'martin@v.loewis.de', url = 'https://docs.python.org/extending/building', long_description = ''' This is really just a demo package. ''', ext_modules = [module1])
In this example, setup() is called with additional meta-information, which is recommended when distribution packages have to be built. For the extension itself, it specifies preprocessor defines, include directories, library directories, and libraries. Depending on the compiler, distutils passes this information in different ways to the compiler. For example, on Unix, this may result in the compilation commands
gcc -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -fPIC -DMAJOR_VERSION=1 -DMINOR_VERSION=0 -I/usr/local/include -I/usr/local/include/python2.2 -c demo.c -o build/temp.linux-i686-2.2/demo.o gcc -shared build/temp.linux-i686-2.2/demo.o -L/usr/local/lib -ltcl83 -o build/lib.linux-i686-2.2/demo.so
These lines are for demonstration purposes only; distutils users should trust that distutils gets the invocations right.
4.2. Distributing your extension modules¶
When an extension has been successfully built, there are three ways to use it.
End-users will typically want to install the module, they do so by running
Module maintainers should produce source packages; to do so, they run
In some cases, additional files need to be included in a source distribution; this is done through a MANIFEST.in file; see Specifying the files to distribute for details.
If the source distribution has been built successfully, maintainers can also create binary distributions. Depending on the platform, one of the following commands can be used to do so.
python setup.py bdist_rpm python setup.py bdist_dumb
Расширение файла PYD
Модули Python Dynamic сохраняются в виде файлов .PYD в системах Windows. Динамический модуль Python содержит библиотеки, которые могут использоваться другими приложениями Python. Такие библиотеки хранятся в виде файлов DLL (библиотека динамической компоновки). Динамические библиотеки обеспечивают более быструю загрузку кода и модульность приложений. В отличие от модулей .PYC и .PYO, файлы PYD специфичны для MS Windows.
Содержимое файлов PYD — динамический модуль Python?
Файлы PYD содержат скомпилированные модули Python. Модули содержат одно или несколько пространств имен. Программы Python, использующие такие модули, могут ссылаться на функции в этих модулях. Модули могут использоваться несколькими приложениями Python. Создание и использование модулей PYD автоматизировано и может быть настроено в среде разработки.
Программы, которые поддерживают PYD расширение файла
Ниже вы найдете указатель программ, которые можно использовать для открытия файлов PYD, разделенных на категории 3 в соответствии с поддерживаемой системной платформой. Файлы с суффиксом PYD могут быть скопированы на любое мобильное устройство или системную платформу, но может быть невозможно открыть их должным образом в целевой системе.
Программы, обслуживающие файл PYD
Windows
MAC OS
Linux
Как открыть файл PYD?
Отсутствие возможности открывать файлы с расширением PYD может иметь различное происхождение. К счастью, наиболее распространенные проблемы с файлами PYD могут быть решены без глубоких знаний в области ИТ, а главное, за считанные минуты. Приведенный ниже список проведет вас через процесс решения возникшей проблемы.
Шаг 1. Скачайте и установите Foundation Python
Проблемы с открытием и работой с файлами PYD, скорее всего, связаны с отсутствием надлежащего программного обеспечения, совместимого с файлами PYD на вашем компьютере. Эта проблема может быть решена путем загрузки и установки # РЕКОМЕНДОВАННОЙ # или другой совместимой программы, такой как Python, Jabbim. В верхней части страницы находится список всех программ, сгруппированных по поддерживаемым операционным системам. Одним из наиболее безопасных способов загрузки программного обеспечения является использование ссылок официальных дистрибьюторов. Посетите сайт Foundation Python и загрузите установщик.
Шаг 2. Проверьте версию Foundation Python и обновите при необходимости
Вы по-прежнему не можете получить доступ к файлам PYD, хотя Foundation Python установлен в вашей системе? Убедитесь, что программное обеспечение обновлено. Разработчики программного обеспечения могут реализовать поддержку более современных форматов файлов в обновленных версиях своих продуктов. Это может быть одной из причин, по которой PYD файлы не совместимы с Foundation Python. Самая последняя версия Foundation Python обратно совместима и может работать с форматами файлов, поддерживаемыми более старыми версиями программного обеспечения.
Шаг 3. Назначьте Foundation Python для PYD файлов
Если проблема не была решена на предыдущем шаге, вам следует связать PYD файлы с последней версией Foundation Python, установленной на вашем устройстве. Следующий шаг не должен создавать проблем. Процедура проста и в значительной степени не зависит от системы
Процедура изменения программы по умолчанию в Windows
- Выберите пункт Открыть с помощью в меню «Файл», к которому можно щелкнуть правой кнопкой мыши файл PYD.
- Нажмите Выбрать другое приложение и затем выберите опцию Еще приложения
- Последний шаг — выбрать опцию Найти другое приложение на этом. указать путь к папке, в которой установлен Foundation Python. Теперь осталось только подтвердить свой выбор, выбрав Всегда использовать это приложение для открытия PYD файлы и нажав ОК .
Процедура изменения программы по умолчанию в Mac OS
- Нажав правую кнопку мыши на выбранном файле PYD, откройте меню файла и выберите Информация.
- Найдите опцию Открыть с помощью — щелкните заголовок, если он скрыт
- Выберите Foundation Python и нажмите Изменить для всех .
- Если вы выполнили предыдущие шаги, должно появиться сообщение: Это изменение будет применено ко всем файлам с расширением PYD. Затем нажмите кнопку Вперед» , чтобы завершить процесс.
Шаг 4. Убедитесь, что PYD не неисправен
Вы внимательно следили за шагами, перечисленными в пунктах 1-3, но проблема все еще присутствует? Вы должны проверить, является ли файл правильным PYD файлом. Отсутствие доступа к файлу может быть связано с различными проблемами.
1. Убедитесь, что PYD не заражен компьютерным вирусом
Если файл заражен, вредоносная программа, находящаяся в файле PYD, препятствует попыткам открыть его. Немедленно просканируйте файл с помощью антивирусного инструмента или просмотрите всю систему, чтобы убедиться, что вся система безопасна. PYD файл инфицирован вредоносным ПО? Следуйте инструкциям антивирусного программного обеспечения.
2. Убедитесь, что файл с расширением PYD завершен и не содержит ошибок
Вы получили PYD файл от другого человека? Попросите его / ее отправить еще раз. В процессе копирования файла могут возникнуть ошибки, делающие файл неполным или поврежденным. Это может быть источником проблем с файлом. При загрузке файла с расширением PYD из Интернета может произойти ошибка, приводящая к неполному файлу. Попробуйте загрузить файл еще раз.
3. Проверьте, есть ли у пользователя, вошедшего в систему, права администратора.
Иногда для доступа к файлам пользователю необходимы права администратора. Войдите в систему, используя учетную запись администратора, и посмотрите, решит ли это проблему.
4. Убедитесь, что ваше устройство соответствует требованиям для возможности открытия Foundation Python
Если система перегружена, она может не справиться с программой, которую вы используете для открытия файлов с расширением PYD. В этом случае закройте другие приложения.
5. Убедитесь, что ваша операционная система и драйверы обновлены
Регулярно обновляемая система, драйверы и программы обеспечивают безопасность вашего компьютера. Это также может предотвратить проблемы с файлами Python Dynamic Module. Возможно, что одно из доступных обновлений системы или драйверов может решить проблемы с файлами PYD, влияющими на более старые версии данного программного обеспечения.
Вы хотите помочь?
Если у Вас есть дополнительная информация о расширение файла PYD мы будем признательны, если Вы поделитесь ею с пользователями нашего сайта. Воспользуйтесь формуляром, находящимся здесь и отправьте нам свою информацию о файле PYD.