2017-03-15 13 views
0

저는 우분투 플랫폼에서 cython으로 작업하고 있습니다. 나를 괴롭히는 것이 하나있는 것을 제외하면 모든 것이 잘 작동합니다. 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 파일입니다 자동으로되지 않습니다. 대한 ( https://www.python.org/dev/peps/pep-3149/

태그는 (여기 cpython) 파이썬 구현 (여기 36 3.6) 버전, 컴파일시 옵션에 대한 플래그를 포함 m을 : PEP 3149은 컴파일 된 모듈의 파일 이름에 포함 할 태그를 정의 파이썬의 메모리 할당자를 사용하여, 이것이 디폴트이다). 플랫폼 태그 x86_64-linux-gnu은 PEP 3149의 일부가 아니며 정의 된 위치를 알지 못합니다.

이러한 변화의 distutils에 구현하고 사이 썬은

패키지의 가져 오기 이름이 파일 이름에 영향을받지 않습니다 :-) "비난"아니다.

PEP 3149를 준수하지 않은 특별한 이유가 있습니까? 링커 명령을 수동으로 실행하여 설치 파일의 빌드 프로세스를 바꿀 수는 있지만 덜 편리합니다.