Я пытаюсь скомпилировать файл .pyd с использованием Nuitka версии 2.6.4. Я скомпилировал .pyd через Cython, выполнив следующую команду: ```python python setup.py build_ext --inplace ``` Вот код, который я использовал: ```python from setuptools import setup from Cython.Build import cythonize setup( ext_modules=cythonize("main.py", compiler_directives={"language_level": "3"}) ) ``` Изначально я использовал Python версии 3.9.1 и выполнял команду: ```bash python3.9 -m nuitka --standalone --windows-console-mode=disable --enable-plugin=tk-inter main.cp39-win_amd64.pyd ``` Вывод, который я получил, был следующим: ``` Nuitka-Options: Used command line options: --standalone --show-scons --windows-console-mode=disable Nuitka-Options: --enable-plugin=tk-inter main.cp39-win_amd64.pyd Nuitka: Starting Python compilation with Nuitka '2.6.4' on Python (flavor Unknown), '3.9' commercial grade 'not Nuitka: installed'. SyntaxError: invalid or missing encoding declaration for 'main.cp39-win_amd64.pyd' Nuitka is very syntax compatible with standard Python. It is currently running with Python version '3.9', you might want to specify more clearly with the use of the precise Python interpreter binary and '-m nuitka', e.g. use this 'python3.13 -m nuitka' option, if that's not the one the program expects. ``` Я подумал, что, возможно, не указал кодировку, и добавил следующую строку: ```python # -*- coding: utf-8 -*- set PYTHONIOENCODING=utf-8 ``` Однако это не решило проблему. Я также попробовал установить Python 3.13 и 3.10, но результат остался прежним. Возможно, я что-то делаю неправильно, или Nuitka не поддерживает .pyd файлы? Можете ли вы помочь разобраться в данной ситуации?
Ошибка, с которой вы столкнулись (`SyntaxError: invalid or missing encoding declaration`), возникает, когда Nuitka пытается интерпретировать файл `.pyd` как исходный код Python, а не как модуль C. Файлы `.pyd` обычно являются компилированными модулями и не интерпретируются Nuitka непосредственно. Вот несколько шагов, которые могут помочь вам решить проблему: 1. **Не используйте .pyd с Nuitka**: Nuitka предназначен для компиляции исходного кода Python (.py). Файлы `.pyd` уже являются бинарными файлами и не должны компилироваться снова через Nuitka. Вместо этого используйте ваш .py файл. 2. **Компиляция только .py файла**: Если у вас есть файл `main.py`, вам нужно скомпилировать именно его. Используйте следующую команду: ```bash python -m nuitka --standalone --windows-console-mode=disable --enable-plugin=tk-inter main.py ``` 3. **Убедитесь в корректности кода**: Проверьте ваш файл `main.py` на наличие синтаксических ошибок или проблем с кодировкой. Убедитесь, что у вас есть корректная строка кодировки в начале файла: ```python # -*- coding: utf-8 -*- ``` 4. **Убедитесь, что вы используете правильную версию Python**: Убедитесь, что вы используете то же окружение Python, в котором вы устанавливали Nuitka и ваши зависимости. Можете запустить команду `python --version` для проверки. 5. **Проверьте настройки Cython**: Убедитесь, что с помощью Cython был правильно собран `.pyd` файл, если он необходим для вашего проекта. Если вам нужно использовать механизмы Cython и Nuitka вместе, сначала компилируйте код на Cython в `.pyd` файл, а затем используйте сам `.py` файл для Nuitka. Не компилируйте `.pyd` с Nuitka напрямую. Если проблема сохраняется, предоставьте больше информации о вашей среде (например, версии Python и Nuitka, структура проекта), чтобы мы могли помочь более детально.
Короче, извиняюсь за путаницу. Прочитал недостоверную инфу и повёлся.
Итог таков, .pyd не компилиться в Nuitka
Nuitka работает только с .py и в C++/C сама уже собирает (для этого собственно и качается отдельно gcc mingw64) .
Изначально хотел сделать код более нечитабельным и сложно декомпилируемым, потому решил так заморочиться.
В общем, решил забить и нашёл в докумке аргументы для сборки, которые хотел воплотить с Cython.
--lto=yes --nofollow-import-to=unittest --nofollow-import-to=pytest --nofollow-import-to=pdb --assume-yes-for-downloads --remove-output --noinclude-pytest-mode=nofollow --noinclude-setuptools-mode=nofollow