Подтвердить что ты не робот

Как скомпилировать пакет Python в dll

Ну, у меня есть пакет Python. Мне нужно скомпилировать его как dll, прежде чем распространять его легко импортируемым способом. Как? Вы можете предложить *.pyc. Но я читал где-нибудь любой *.pyc можно легко декомпилировать!

Update: Следуйте этим:
1) Я написал пакет python
2) хочу распространять его
3) НЕ хочу распространять источник
4) *.pyc является декомпилируемым → источник можно извлечь!
5) dll стандартно

4b9b3361

Ответ 1

Напишите все, что вы хотите скрыть в Cython, и скомпилируйте его в pyd. Это как можно ближе к созданию скомпилированного кода на Python.

Кроме того, dll не является стандартом, а не миром Python. Они также не переносимы.

Ответ 2

Вы можете использовать py2exe.org для преобразования скриптов python в исполняемые файлы Windows. Конечно, это будет работать только на окнах, но лучше ничего.

Ответ 3

Вы можете встроить python внутри C. Настоящий трюк - это преобразование значений C и значений Python. Однако, если вы это сделали, создание DLL довольно простое.

Однако зачем вам делать dll? Вам нужно использовать это из программы, отличной от python?

Ответ 5

Я бы также использовал Cython для создания файлов pyd, как писал Dikei. Но если вы действительно хотите защитить свой код, лучше писать важные материалы на С++. Лучше всего было бы комбинировать С++ и Python. Идея: вы оставите код python открытым для настроек, чтобы вам не приходилось собирать все снова и снова. Это означает, что вы напишете "ядро" в С++ (это самое безопасное решение в наши дни) и используйте эти dll файлы в вашем коде python. Это действительно зависит от того, какой инструмент или программа вы строите и как вы хотите ее выполнить. Я создаю в основном файл исполнения (exe, app) после завершения работы с инструментом или программой, но это больше для конечного пользователя. Это можно сделать с помощью py2exe и py2app (оба совместимы с 64 бит). Если вы реализуете интерпретатор, конечный пользовательский компьютер не должен иметь установленный python в системе.

Файл A pyd совпадает с файлом dll и полностью поддерживается внутри python. Таким образом, вы можете импортировать свой модуль. Вы можете найти дополнительную информацию об этом здесь.

Использование и генерация файлов pyd - это самый быстрый и простой способ создания безопасного и портативного кода python.

Вы также можете записать реальные dll файлы в С++ и импортировать их с помощью ctypes, чтобы использовать их (здесь хороший и здесь описание python о том, как это работает)

Ответ 6

  Подробнее об ответе Ника Оделла

Вы должны быть в Windows, чтобы библиотеки DLL работали, они не переносимы.

Однако приведенный ниже код является кроссплатформенным, и все платформы поддерживают время выполнения, поэтому его можно перекомпилировать для каждой платформы, на которой он вам нужен.

Python (пока) не предоставляет простой инструмент для создания DLL, однако вы можете сделать это в C/C++


Для начала вам понадобится компилятор (в Windows его нет по умолчанию), а именно Cygwin, MinGW или Visual Studio.

Базовые знания C также необходимы (так как мы будем кодировать в основном на C).

Вам также нужно будет включить необходимые заголовки, я пропущу это, чтобы он не стал ужасно длинным и предположил, что все настроено правильно.


Для этой демонстрации я напечатаю традиционный привет мир:

Код Python, который мы будем преобразовывать в DLL:

def foo(): print("hello world")

код C:

#include "Python.h" // Includes everything to use the Python-C API

int foo(void); // Declare foo

int foo(void) { // Name of our function in our DLL

    Py_Initialize(); // Initialise Python

    PyRun_SimpleString("print('hello world')"); // Run the Python commands

    return 0; // Finish execution
}

Вот учебник по встраиванию Python. Здесь нужно добавить несколько дополнительных вещей, но для краткости я их не упомянул.

Скомпилируйте его, и у вас должна быть DLL. :)


Это еще не все. Вам нужно будет распространять все необходимые зависимости, это будет означать время выполнения python36.dll и некоторые другие компоненты для запуска скрипта Python.

Мой код C не идеален, поэтому, если кто-то сможет заметить какие-либо улучшения, пожалуйста, прокомментируйте, и я сделаю все возможное, чтобы исправить это.


Это также возможно в С# из этого ответа Как вызвать конкретный метод из сценария Python в С#?, поскольку С# может создавать библиотеки DLL, а функции Python можно вызывать из С#.

Ответ 7

Вы можете использовать pyinstaller для преобразования файлов .py в исполняемый файл со всеми необходимыми пакетами в формат .dll.

Шаг 1. pip install pyinstaller,

Шаг 2. Новый файл Python, назовите его code.py.

Шаг 3. Напишите несколько строк кода, например, print ("Hello World")

Шаг 4. Откройте командную строку в том же месте и напишите pyinstaller code.py, нажмите Enter. Последний шаг увидеть в том же месте две папки с именем build, dist будет создан. внутри папки dist находится код папки, и внутри этой папки есть исполняемый файл code.exe вместе с необходимыми файлами .dll.

Ответ 8

В настоящее время существует простое solutino: используйте компилятор Nuitka, как описано в Руководстве пользователя Nuitka

. Вариант использования 2 - Компиляция модуля расширения Если вы хотите скомпилировать один модуль расширения, все, что вам нужно сделать, это:

 python -m nuitka --module some_module.py 

Полученный файл some_module.so затем можно использовать вместо some_module.py.

Вам нужно скомпилировать для каждой платформы, которую вы хотите поддерживать, и написать некоторый код initializatino для импорта файла so/pyd, соответствующего данной версии plaform/python и т.д.

В результате получается не DLL, как было запрошено, а скомпилированный двоичный формат Python (это не байт-код, как в файлах pyc; формат so/pyd не может быть легко декомпилирован - Nuitka компилируется в машинный код посредством перевода C++)

Ответ 9

Возьмите Visual Studio Express и IronPython и сделайте это именно так? Однако вы будете в мире Python 2.7.6.