2017-03-15 25 views
0

私はUbuntuプラットフォームでcythonを使っています。私を悩ませることが1つある以外は、すべてうまく動作します。 cythonプロジェクトを.soファイルにコンパイルするときは、.pyxファイルのファイル名に「cpython-36m-x86_64-linux-gnu」が追加されます。 たとえば、 "helloworld.pyx"をビルドすると、結果の.soファイルは "helloworld.cpython-36m-x86_64-linux-gnu.so"と呼ばれます。私はしかし、単にそれが "helloworld.so"と呼ばれることを望むでしょう。Cythonのコンパイルでファイル名にテキストが追加されますが、それを取り除く方法は?

私は答えが非常に些細なものだと思っていたので、私は30分後にも私は何も見つけられませんでした。誰にも分かりますか?

print('hello world') 

setup.pyファイル:

ファイル構築
from distutils.core import setup 
from Cython.Build import cythonize 

setup(
    ext_modules = cythonize("helloworld.pyx") 
) 

python setup.py build_ext --inplace 
Compiling helloworld.pyx because it changed. 
[1/1] Cythonizing helloworld.pyx 
running build_ext 
building 'helloworld' extension 
gcc -pthread -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/**/anaconda3/include/python3.6m -c helloworld.c -o build/temp.linux-x86_64-3.6/helloworld.o 
gcc -pthread -shared -L/home/**/anaconda3/lib -Wl,-rpath=/home/ed/anaconda3/lib,--no-as-needed build/temp.linux-x86_64-3.6/helloworld.o -L/home/**/anaconda3/lib -lpython3.6m -o /home/**/new_project/helloworld.cpython-36m-x86_64-linux-gnu.so 
+0

余分なテキストでも、 'import helloworld'はうまく動作します。作成後にファイル名を編集したり、コピーを作成したりすることができます。しかし、私はただそれだけにしました。それは私のために途中で取得しません。 – hpaulj

+0

'-o/home/paul/mypy/cython3/try_numpy/iterate.cpython-35m-i386-linux-gnu.so'から' -o/iterate.so'に 'gcc'コマンドの終わりを変更すると、結果の '.so'名を変更します。しかし、 'setup'ファイルで' -o'オプションを指定する方法を見つけることはできません。 – hpaulj

答えて

1

あなたは、少なくとも、それを取り除くことはできませんがここで

は私の.pyxファイルです自動的にではありません。 PEP 3149は、コンパイルされたモジュールのファイル名に含まれるようにタグを定義:https://www.python.org/dev/peps/pep-3149/

タグは、Python実装(ここでcpython)、バージョン(ここで36 3.6)、コンパイル時のオプションフラグ(m用を含みますPythonのメモリアロケータを使用して、これがデフォルトです)。プラットフォームタグx86_64-linux-gnuはPEP 3149の一部ではありません。定義されている場所はわかりません。

これらの変更はdistutilsの中に実装されているとcythonは:-)

パッケージのインポート名がこのファイル名に影響されない「非難する」ではありません。

PEP 3149を遵守しない特別な理由はありますか?手動でリンカーコマンドを発行することで、セットアップファイルのビルドプロセスを置き換えることができますが、これはあまり便利ではありません。

関連する問題