web-dev-qa-db-ja.com

Pythonパッケージをdllにコンパイルする方法

まあ、私はPythonパッケージです。簡単にインポートできるように配布する前にdllとしてコンパイルする必要があります。How?*.pyc。しかし、どこかで_*.pycは簡単に逆コンパイルできます!

更新:以下に従ってください:
1)pythonパッケージを書きました
2)配布したい
3)ソースを配布したくない
4)* .pycは逆コンパイル可能>>ソースを抽出可能!
5)dllは標準です

21
Developer

Cythonで非表示にするものをすべて記述し、pydにコンパイルします。これは、コンパイルされたpythonコードを作成するのに近づきます。

また、dllは標準ではなく、Python world。ではありません。移植性もありません。

9
Kien Truong

embed python Cの中に 。本当のトリックはC値とPython値の間で変換することです。ただし、DLLを作成することは かなり簡単 です。

しかし、なぜdllを作成する必要があるのですか? Python以外のプログラムからこれを使用する必要がありますか?

5
Nick ODell

py2exe.org を使用して、pythonスクリプトをWindows実行可能ファイルに変換できます。これはWindowsでのみ機能しますが、何もしないよりはましです。

5
jb.

Python埋め込みはCFFIバージョン1.5でサポートされています.dllファイルは、Windows Cアプリケーションで使用できます。

4
Ken Hung

また、Dikeiが書いたように、 Cython を使用してpydファイルを生成します。しかし、本当にコードを保護したい場合は、重要なものをC++で記述する方が良いでしょう。最善の方法は、C++Pythonの両方を組み合わせることです。アイデア:python調整のためにコードを開いたままにして、繰り返しすべてをコンパイルする必要がないようにします。つまり、C++で「コア」を記述します(これは最近の最も安全なソリューションです)、これらのdllファイルをpythonコードで使用します。実際に作成するツールやプログラムの種類とその方法によって異なりますツールまたはプログラムを終了したら、主に実行ファイル(exeapp)を作成しますが、これはエンドユーザー向けです。これは_py2exe_および_py2app_(両方とも64ビット互換)インタープリターを実装する場合、エンドユーザーのマシンにシステムにpythonをインストールする必要はありません。

pydファイルはdllと同じで、python内で完全にサポートされています。したがって、通常はモジュールをインポートできます。それに関する詳細情報を見つけることができます こちら

pydファイルを使用して生成することは、安全で移植性のあるpythonコードを作成するための最速かつ最も簡単な方法です。

また、実際のdllファイルを C++ で記述し、ctypesでインポートして使用することもできます(ここでは post を、ここでは- pythonの説明 仕組み

2
MagSec

Nick ODellの回答をさらに拡大するには

DLLを機能させるにはWindowsを使用する必要があります。DLLは移植性がありません。

ただし、以下のコードはクロスプラットフォームであり、すべてのプラットフォームがランタイムをサポートしているため、作業に必要なプラットフォームごとに再コンパイルできます。

Pythonは(まだ)dllを作成する簡単なツールを提供していませんが、C/C++でそれを行うことができます


最初に、特にCygwin、MinGW、またはVisual Studioのコンパイラー(Windowsにはデフォルトではありません)が必要です。

Cの基本的な知識も必要です(主にCでコーディングするため)。

必要なヘッダーも含める必要があります。これをスキップして、ひどく長くならないようにし、すべてが正しくセットアップされていると仮定します。


このデモでは、伝統的なこんにちはの世界を印刷します。

DLLに変換するPythonコード:

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を埋め込むための tutorial は次のとおりです。ここに追加する必要がある余分なものがいくつかありますが、簡潔にするためにそれらを省略しました。

それをコンパイルすると、DLLが必要になります。 :)


それだけではありません。必要な依存関係を配布する必要があります。つまり、python36.dllランタイムとPythonスクリプトを実行する他のコンポーネントが必要です。

私のCコーディングは完璧ではありません。だから誰でも改善点を見つけることができたらコメントしてください。私はそれを修正するために最善を尽くします。


この答えからC#でも可能かもしれません C#でPythonスクリプトから特定のメソッドを呼び出すにはどうすればよいですか? 、C#はDLLを作成でき、Python C#の関数。

1
Simon

pyinstaller を使用して、.pyファイルを実行可能ファイルに変換し、必要なすべてのパッケージを.dll形式に変換できます。

ステップ1. pip install pyinstaller、

ステップ2. new python fileではcode.pyという名前にします。

ステップ3.コードの数行、つまりprint( "Hello World")を書く

ステップ4.同じ場所でコマンドプロンプトを開き、pyinstaller code.pyを入力してEnterキーを押します。最終ステップでは、同じ場所に2つのフォルダー名buildが表示され、distが作成されます。 distフォルダー内にはフォルダーコードがあり、そのフォルダー内には、exeファイルcode.exeと必要な.dllファイルがあります。

0
Muhammad Adnan