web-dev-qa-db-ja.com

CythonはEXEにコンパイルできますか?

Cythonsの目的が何か知っています。コードを高速化するために、Pythonに似た言語でコンパイル可能なC拡張を記述します。私が知りたいこと(そして私のgoogle-fuを使用して見つけることができないようです)は、CythonがpythonコードをすでにCに分解しているように見えるため、実行可能形式にコンパイルできるかどうかです。

私はすでにパッケージャーであるPy2Exeをすでに使用していますが、これを使用してアンパックするのが少し難しいものにコンパイルすることに興味があります(Py2EXEを使用してパックされたものは、基本的には不要な7Zipを使用して抽出できます)

これがnotである場合、私の次の代替案は、すべてのコードをコンパイルしてモジュールとしてロードし、少なくともpy2exeを使用してパッケージ化することですmostコンパイルされた形式のコードですよね?

49
ThantiK

Embedding Pyrex HOWTO によると、原則として、望みどおりのことができるようです。 (Pyrexは事実上、前世代のCythonです。)

うーん...その名前は、私が最初に試したよりも優れた検索を示唆しています。「埋め込みcython」は このページ につながります。

29
Peter Hansen

cythonの埋め込みに関するwikiページです

python to C:\Python31をインストールし、Microsoftコンパイラを使用したいとします。

smalltest1.py-コンパイルするファイルです。

test.exe-実行可能ファイルの名前。

clの環境変数を設定する必要があります。

C:\Python31\python.exe C:\Python31\Scripts\cython.py smalltest1.py --embed

cl.exe  /nologo /Ox /MD /W3 /GS- /DNDEBUG -Ic:\Python31\include -Ic:\Python31\PC /Tcsmalltest1.c /link /OUT:"test.exe" /SUBSYSTEM:CONSOLE /MACHINE:X86 /LIBPATH:c:\Python31\libs /LIBPATH:c:\Python31\PCbuild
43
Aftershock

Cythonとgccを使用して* .pyファイルを* .exeに変換しました。以下のバッチファイルを使用します。

# build.bat
set PROJECT_NAME=test
set PYTHON_DIR=C:\python27
%PYTHON_DIR%\python -m cython --embed -o %PROJECT_NAME%.c %PROJECT_NAME%.py
gcc -Os -I %PYTHON_DIR%\include -o %PROJECT_NAME%.exe %PROJECT_NAME%.c -lpython27 -lm -L %PYTHON_DIR%\libs
2
PANDA

余震の答えはいいです、私が言いたいのは、コンソールなしでアプリを実行することです。 Aftershockの答えのように、コンソールなしでアプリケーションを実行したい場合、2つのポイントが重要です。

  1. 「cython --embed」によって作成された「.c」ファイル内のすべてのmain()関数をwmain()で置き換えます。

  2. / link/subsystem:windows/entry:wmainCRTStartupを "cl.exe ..."コマンドの最後に追加します。

0
longgangfan