2016-03-22 8 views
2

私はpycharmでanacondaを使用しています。ご存知のように、cythonはデフォルトでanacondaにインストールされています。私のプロジェクトにはpycharmで実行したい小さなcythonコードが含まれています。これどうやってするの?この追加main.pyにpycharmでanacondaでcythonコードを実行するには?

import pyximport 
pyximport.install(setup_args={'include_dirs': np.get_include()}) 
import cython_helper 

をそしてcython_helper.pyxファイルにあなたのcythonコードを配置これを行うには

答えて

1

最も単純な方法は、pyximportを使用することです。

あなたはENV変数を設定する必要があり、あなたのPythonコードをruningて前に、Windows上でこれを実行した場合(VS 2013):

SET VS90COMNTOOLS=%VS120COMNTOOLS% 
1

質問は別物意味するかもしれません:あなたが持っている

  1. をa .pyxソースファイルですが、古いPythonスクリプトと同じように扱うので、スクリプトのアクションを呼び出すだけです。

  2. .pyxファイルは拡張モジュールであり、ビルドされた後、そこからインポートします。

あなたは他の答えのように、このためpyximportを使用することができますが、別の便利なツールは、最近runcython projectです。 runcythonがインストールされている場合は、上記のケース#1のために、あなたは、単に行うことができます:あなたのコマンドプロンプトから

runcython my_file.pyx 

を、そしてmy_file.pyxがコンパイルされ、その後、任意の一般的なPythonスクリプトがあろうと同じように実行。スクリプトにmainという名前の関数があると、runcythonはそれを自動的に呼び出して、汎用Pythonスクリプトのif __name__ == '__main__'セクションのように扱います。したがって、Cythonで「スクリプト」を実行する場合は、すべての最上位定義を作成する必要がありますが、最後に定義されたmainというトップレベル関数にすべての「作業」を入れるのは良い方法です。

標準ライブラリrunpyrunpyを使用することが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が便利です。

関連する問題