Ini mungkin pertanyaan sederhana, tetapi saya mengalami masalah dalam membuat _splitter.pyx menjadi _splitter.so (jadi saya dapat mencoba beberapa perubahan yang saya buat). Saat ini saya sedang mencoba membuat file asli dengan perintah:
cython -a _splitter.pyx
Dan itu menghasilkan kesalahan berikut:
Kesalahan saat mengkompilasi file Cython:
... self.index_to_samples, self.feature_values, end_negative, start_positive)
cdef int compare_SIZE_t(const void* a, const void* b) nogil:
^
_splitter.pyx:1008:34: Diharapkan ')', ditemukan '*'
Saya mencoba beberapa perubahan seperti:
cython -3 _splitter.pyx
Atau
cython -a _splitter.pyx _splitter.pxd
Tapi itu hanya menghasilkan lebih banyak kesalahan. Apakah saya melakukan sesuatu yang salah?
Ketika diperbaiki, saya berencana untuk menggunakan perintah:
gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python2.7 -o _splitter.so _splitter.c
Apakah itu pendekatan yang benar?
Terima kasih banyak atas bantuannya
EDIT: Upgrade Cython saya ke versi 0.24. Sekarang saya mendapatkan kesalahan berikut di beberapa baris:
Kesalahan saat mengkompilasi file Cython:
... fitur[f_i], fitur[f_j] = fitur[f_j], fitur[f_i]
# Gambarkan ambang acak saat ini. ambang batas = rand_uniform(nilai_fitur_min, nilai_fitur_maks, status_acak)
^
_splitter.pyx:1547:65: Mengonversi ke objek Python tidak diizinkan tanpa gil
1 menjawab
Coba perbarui instalasi Cython Anda. Versi lama (<0,18) tidak mendukung kata kunci const.
Lihat bagaimana cara menggunakan const
Jawaban: Sejak Cython 0.18, Anda bisa menggunakannya dalam kode dan deklarasi Anda.
Versi Cython sebelumnya tidak mendukung const secara langsung dan memerlukan peretasan berikut untuk mengompilasinya ke dalam kode sumber C:
nogil
.
)
hilang pada baris sebelumnya. Kita perlu melihat lebih banyak kode (di sekitar kesalahan).cython _splitter.pyx
tanpa masalah (cython 0.24.1, versi apa pun >= 0.23 seharusnya baik-baik saja)