Lewati ke isi

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:

  1. Paket yang ditulis murni dengan Python (misalnya tidak mengandung ekstensi C)
  2. 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
#1 --------------------
Menjalankan fungsi: demo__demo.test_numpy()

Tumpukan kesalahan:
Traceback (most recent call last):
  File "demo__demo", line 1, in <module>
    import numpy
ImportError:
PENTING: HARAP BACA INI UNTUK SARAN CARA MENGATASI MASALAH INI!
Pengimporan ekstensi C numpy gagal. Kesalahan ini dapat terjadi karena
banyak alasan, sering kali karena masalah pada pengaturan Anda atau cara NumPy
dipasang.
Kami telah mengumpulkan beberapa alasan umum dan kiat pemecahan masalah di:
    https://numpy.org/devdocs/user/troubleshooting-importerror.html
Harap perhatikan dan periksa hal berikut:
  * Versi Python adalah: Python3.8 dari "/opt/python/bin/python3.8"
  * Versi NumPy adalah: "1.22.1"
dan pastikan bahwa keduanya adalah versi yang Anda harapkan.
Harap pelajari dengan saksama dokumentasi yang tertaut di atas untuk bantuan lebih lanjut.
Kesalahan asli adalah: libopenblas64_p-r0-2f7c42d4.3.18.so: tidak dapat membuka file objek bersama: Tidak ada file atau direktori semacam itu

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
print(numpy.__version__)

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:

  1. Jika sebuah proses Worker sebelumnya pernah import paket pihak ketiga ini, proses Worker tersebut mungkin masih dapat berjalan dengan mengandalkan data dalam cache, tetapi tampak memanggil versi lama (yaitu versi cache pertama).
  2. Jika sebuah proses Worker sebelumnya tidak pernah import paket pihak ketiga ini, maka saat pertama kali import dan memuat sumber daya terkait, karena paket ini tidak terinstal dengan benar pada instalasi kedua, paket tidak dapat melakukan import secara normal.
  3. 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:

  1. numpy
  2. numpy-1.22.1.dist-info
  3. numpy.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:

  1. Hapus sepenuhnya folder-folder yang terkait dengan numpy di atas
  2. Mulai ulang DataFlux Func
  3. Instal ulang numpy