Pemecahan Masalah / Paket tidak dapat di-import atau kesalahan versi
1. Pendahuluan
Dalam pengembangan Python normal, setiap perubahan pada paket pihak ketiga mengharuskan sistem dimulai ulang.
Namun, di DataFlux Func, demi kemudahan pengembangan, memasang paket pihak ketiga tidak perlu memulai ulang seluruh sistem DataFlux Func.
Tetapi ini tidak menjamin 100% aman.
Tanpa memulai ulang DataFlux Func, paket pihak ketiga yang dapat dipasang atau ditingkatkan secara normal harus memenuhi ketentuan berikut:
- Paket yang ditulis murni dengan Python (misalnya tidak mengandung ekstensi C)
- Tidak memiliki konten yang dimuat sebelumnya (seperti berbagai model data besar)
Jika sebuah paket pihak ketiga tidak memenuhi ketentuan di atas, hanya dapat menjamin bahwa paket berfungsi normal saat pertama kali diinstal; pembaruan berikutnya memerlukan memulai ulang seluruh DataFlux Func.
2. Kasus Kegagalan numpy
Paket numpy yang umum digunakan adalah contoh khas paket yang menggunakan ekstensi C. Setelah men-deploy DataFlux Func, numpy dapat digunakan secara normal saat pertama kali diinstal, tetapi jika kemudian menginstal ulang numpy dengan versi yang berbeda.
Maka, Anda mungkin akan mengalami beberapa kegagalan berikut:
2.1 numpy tidak dapat di-import
Sebagai contoh numpy, ketika Skrip dieksekusi hingga mencapai import numpy, muncul kesalahan berikut:
| Text Only | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
2.2 numpy dapat digunakan tetapi memanggil versi lama
Sebagai contoh numpy, dengan mencetak __version___ pada objek paket, dapat dilihat versi paket numpy yang sebenarnya digunakan saat eksekusi kode, tetapi tidak sesuai dengan versi yang benar-benar terinstal.
| Python | |
|---|---|
1 | |
Terpenuhinya kondisi ini tidak berarti kode masih dapat berjalan normal. Setelah sekadar memulai ulang DataFlux Func, masalahnya akan berubah menjadi masalah pada poin 1.1 di atas, jangan abaikan.
3. Penjelasan Penyebab
Paket pihak ketiga seperti numpy, selama proses instalasi, mungkin mengunduh sumber daya tambahan (seperti kode bahasa lain yang perlu dikompilasi, model data, dll.). Setelah instalasi pertama, Python dapat membaca paket pihak ketiga ini secara normal dan memuat data eksternal.
Namun, ketika menginstal ulang versi yang berbeda dari paket yang sama, file sumber daya dari versi sebelumnya masih digunakan, sehingga sebenarnya tidak dapat diperbarui/ditimpa, yang menyebabkan paket tidak terinstal dengan benar.
Pada saat ini, bagi DataFlux Func terdapat beberapa situasi berikut:
- Jika sebuah proses Worker sebelumnya pernah
importpaket pihak ketiga ini, proses Worker tersebut mungkin masih dapat berjalan dengan mengandalkan data dalam cache, tetapi tampak memanggil versi lama (yaitu versi cache pertama). - Jika sebuah proses Worker sebelumnya tidak pernah
importpaket pihak ketiga ini, maka saat pertama kaliimportdan memuat sumber daya terkait, karena paket ini tidak terinstal dengan benar pada instalasi kedua, paket tidak dapat melakukanimportsecara normal. - Pada saat ini, jika DataFlux Func dimulai ulang, maka situasi 1 di atas akan berubah menjadi situasi 2 di atas, karena memulai ulang akan melepaskan cache.
4. Solusi
Sebagai contoh numpy 1.22.1, setelah diinstal akan menghasilkan folder-folder berikut di bawah direktori sumber daya / extra-python-packages:
numpynumpy-1.22.1.dist-infonumpy.libs
Lokasi default direktori sumber daya di host adalah: /usr/local/dataflux-func/data/resources/extra-python-packages
Lokasi direktori sumber daya di dalam container adalah: /data/resources/extra-python-packages
Langkah-langkah untuk mengatasi masalah ini adalah sebagai berikut:
- Hapus sepenuhnya folder-folder yang terkait dengan
numpydi atas - Mulai ulang DataFlux Func
- Instal ulang
numpy