Cython を使い始めたばかりですが、ソース ファイルで gettext 翻訳を使用すると問題が発生します。例として、.pyd オブジェクトへのコンパイルをテストしているScriptParser.pyというソース ファイルがあります。これは、ソースをまったく変更せずに、現時点でファイルをコンパイルしようとしているだけです。このファイルは、プロジェクトのメイン ファイルの 1 つからインポートされます。そのメイン ファイルは、gettext を使用して翻訳関数_()をインストールする別のソース ファイルもインポートします。Cythonが私に与えているエラーはこれです:
Error compiling Cython file:
------------------------------------------------------------
...
fn += u':%i' % step
fn += u']'
return eval(fn)
except:
error(_(u'IndexError'))
^
------------------------------------------------------------
ScriptParser.py:416:19: undeclared name not builtin: _
このソースファイルのどこにも_()が参照または定義されていないため、Cython は明らかに不平を言っています。では、どうすればこの問題を解決できるのだろうかと考えています。ビルド スクリプトを変更して、より多くのファイルを含める必要がありますか? 現在、私は一度に 1 つのファイルをコンパイルして、奇妙な点などをテストしようとしています。この問題に遭遇したとき、私はすでにこの方法で2つのソースファイルをコンパイルしていました。
参照用のビルドスクリプトは次のとおりです。
from distutils.core import setup
from Cython.Build import cythonize
setup(
name = 'testing',
ext_modules = cythonize(['ScriptParser.py',
],
annotate=True),
)
そして、次のように呼び出します。
setup.py build_ext --inplace
先ほど言ったように、ビルド プロセスを台無しにしている可能性がありますが、これが Cython への最初の進出です。「プロジェクト全体」の方法を実行するのではなく、一度に 1 つのソース ファイルをコンパイルしようとしているのかもしれません。