質問は別物意味するかもしれません:あなたが持っている
をa .pyxソースファイルですが、古いPythonスクリプトと同じように扱うので、スクリプトのアクションを呼び出すだけです。
.pyxファイルは拡張モジュールであり、ビルドされた後、そこからインポートします。
あなたは他の答えのように、このためpyximport
を使用することができますが、別の便利なツールは、最近runcython
projectです。 runcython
がインストールされている場合は、上記のケース#1のために、あなたは、単に行うことができます:あなたのコマンドプロンプトから
runcython my_file.pyx
を、そしてmy_file.pyx
がコンパイルされ、その後、任意の一般的なPythonスクリプトがあろうと同じように実行。スクリプトにmain
という名前の関数があると、runcython
はそれを自動的に呼び出して、汎用Pythonスクリプトのif __name__ == '__main__'
セクションのように扱います。したがって、Cythonで「スクリプト」を実行する場合は、すべての最上位定義を作成する必要がありますが、最後に定義されたmain
というトップレベル関数にすべての「作業」を入れるのは良い方法です。
標準ライブラリrunpy
とrunpy
を使用することがpython -m
モジュール実行処理に依存しているフードの下からコードオブジェクトであることが必要であるため、通常if __name__ == '__main__'
トリックは、一般に、拡張モジュールでは動作しないことに注意してください実行モジュール - 拡張モジュールには一般的にないもの。 「no code object」エラーが発生します(たとえば、my_file.so
のように、Cysoから.soをビルドしてインストールした後、python -m my_file
と試してみてください)。
ケース#2の場合、runcython
プロジェクトはmakecython
も提供しています。これは、マルチファイルのdistutilsベースのアプローチを大幅に簡略化したもので、より一般的な方法です。したがって、runcython
を使用してコードを再生した後は、正規のビルドおよびデプロイメント部分にmakecython
を使用できます。
これはまだ新しいライブラリなので、実際の生産依存性などについて話しているのであれば、推薦しません。その場合には、pyximport
はまだまだ改善の余地があります。
しかし、.pyx
拡張モジュールを汎用モジュールのように呼び出すだけの素早く汚れた作業の場合は、runcython
が便利です。
出典
2016-03-22 23:05:45
ely