2017-12-11 15 views
0

私はを使用して*.cというファイルを生成しています。これは後でMS Visual Studio 2017でC/C++としてコンパイルします。すべてのPython *.libが動的にリンクされているというわずかな例外を除いて、すべてうまく動作します。 私の目標は自己完結型のexe(大きなexeサイズは問題ありません)を生成することなので、Python *.libをすべて静的リンクすることが可能かどうか質問したいと思います。私は既に\MTリリースオプションを指定して、デバッガのすべてのPythonライブラリを定義しようとしました。UCRTでPython拡張の依存関係を取り除く方法

残念ながら、別のコンピュータにコピーすると、動的にリンクされた実行可能ファイルがpython3.dllを見つけられないため、私の努力は無駄でした。現在、Pythonの全インストールディレクトリを実行可能ファイルとともにコピーし、コンパイル時に適切なインクルードリンクを指定する予定です。

したがって、私は自己完結型の実行可能な実行可能ファイルを生成するために、任意のオプションに関心があります。

私はあなたの助けと助言に感謝します。

+1

私は理解していますが、これはC++言語とどのように関連していますか?あなたはCファイルについて話しますが、Cは別の言語です。私たちが見ているC++コードはどこにありますか? –

+0

@ThomasMatthews申し訳ありませんが、私はVSのC++プロジェクトとしてコンパイルします。 –

+0

私はあなたがしようとしていることを知っています。それはあなたが思うよりもはるかにトリッキーになるだろう。 – xaav

答えて

1

xaavが正しい。

代わりにコメントすることはできません。代わりに、これを正しい方法に導くことを希望して解決策として投稿します。

理由のためにCythonが存在します。あなたはあなたのPythonコードを取得し、いくつかの変更とバムを追加し、あなたのコードはcythonisedです。

これには2つの理由があります。コードを難読化し、コードを高速化できます(依存します)。

なぜcythonとpyinstallerを使用しないのですか?これは試され、テストされます。 Pyinstallerはそれをサポートしているとも言います。あなたが取っているアプローチは理論的に行うことができますが、それは非常に複雑であり、必要でさえありません。

可能な懸念:

しかし、彼らは私のソースコードを盗むことはできませんか?いいえ、それはそうではありますが簡単ではありません。

Nuitkaを使用できませんか?はい、それがバグであり、意図したとおりに動作しないようにしたい場合です。

ライブラリについては、別のPCでは動作しませんか?スペックファイルは、理由により存在します。手作業のビットとこれが動作することができます。

C++にコンパイルしてスタンドアロンにすることはできませんか?答えられていない質問の数とそれを働かせることができなかった人の数を見てください。また、pyinstallerとcythonが存在していても同じことはしません。 Cythonは広くサポートされています。あなたが長くて難しいことをしているように感じるだけです。

しかし、C++にコンパイルするのは簡単ではありません。決して、pyinstallerはすでに足の作業のほとんどを行います。スペックファイルをここやそこで調整する必要があるかもしれませんが、そうでなければ、それは唯一の方法です。 pyupdaterとの統合も忘れないでください。

+0

cythonは正常に動作します。問題は、実行ファイルを別のPCにコピーできないことです。 pyinstallerにも同様の問題があり、いくつかのWindowsライブラリをバインドし、新しいPC上に見つからない場合、バイナリは失敗します。 –

関連する問題