Anda mungkin pernah menemui sebuah perangkat lunak yang meminta izin untuk memodifikasi variabel PATH Anda, atau instruksi instalasi program lain yang secara samar menyuruh Anda untuk "menyetel variabel LD_LIBRARY_PATH Anda dengan benar".
Sebagai data scientist, Anda mungkin menemui masalah variabel lingkungan lain saat berinteraksi dengan tumpukan komputasi Anda (terutama jika Anda tidak memiliki kendali penuh atasnya, seperti saya). Artikel ini bertujuan mengurai apa itu variabel lingkungan, dan bagaimana penggunaannya dalam konteks data science.
Apa Itu Variabel Lingkungan?
Pertama-tama, izinkan saya menjelaskan apa itu variabel lingkungan, dengan mengulas secara mendalam variabel lingkungan PATH. Saya mendorong Anda untuk menjalankan perintah di sini di terminal bash Anda (dengan penyesuaian yang sesuai — baca teksnya untuk memahami apa yang saya lakukan!).
Saat Anda masuk ke sistem komputer, misalnya terminal komputer lokal Anda atau server jarak jauh melalui SSH, interpreter bash Anda perlu tahu ke mana harus mencari program tertentu, seperti nano (editor teks), atau git (perangkat lunak kontrol versi Anda), atau executable Python Anda. Ini dikendalikan oleh variabel PATH Anda. Variabel tersebut menentukan path ke folder tempat program executable Anda berada.
Berdasarkan konvensi historis, program baris perintah seperti nano, which, dan top, berada di direktori /usr/bin. (Menurut konvensi historis, folder /bin adalah untuk biner perangkat lunak, itulah sebabnya dinamakan /bin.) Program-program ini dibundel dengan sistem operasi Anda, dan karenanya memerlukan izin khusus untuk ditingkatkan.
Cobalah di terminal Anda:
$ which which
/usr/bin/which
$ which top
/usr/bin/top
Program lain (dengan berbagai alasan) diinstal ke /bin sebagai gantinya. ls adalah salah satu contohnya:
$ which ls
/bin/ls
Program lain lagi mungkin diinstal di direktori khusus lainnya:
$ which nano
/usr/local/bin/nano
Bagaimana terminal Bash Anda mengetahui ke mana harus mencari? Ia menggunakan variabel lingkungan PATH. Bentuknya kira-kira seperti ini:
$ echo $PATH
/usr/bin:/bin:/usr/local/bin
Hal terpenting yang perlu diingat tentang variabel PATH adalah bahwa variabel ini "dipisahkan dengan tanda titik dua". Artinya, setiap path direktori dipisahkan oleh tanda "titik dua" (:). Urutan pencarian program oleh terminal bash Anda berjalan dari kiri ke kanan:
/usr/bin/bin/usr/local/bin
Di komputer saya, ketika saya mengetik ls, interpreter bash saya akan melihat ke dalam direktori /usr/bin terlebih dahulu. Ia akan menemukan bahwa ls tidak ada di /usr/bin, lalu beralih ke direktori berikutnya, /bin. Karena ls saya berada di bawah /bin, maka program ls akan dijalankan dari sana.
Anda bisa melihat, ini sekaligus sangat fleksibel untuk menyesuaikan lingkungan komputasi Anda, namun juga berpotensi sangat membuat frustrasi jika suatu program memodifikasi variabel PATH Anda tanpa sepengetahuan Anda.
Tunggu, apakah Anda benar-benar bisa memodifikasi variabel PATH Anda? Ya, dan ada beberapa cara untuk melakukannya.
Cara Memodifikasi variabel PATH
Menggunakan Sesi Bash
Cara pertama bersifat sementara, hanya berlaku untuk sesi bash Anda saat ini. Anda dapat membuat sebuah folder memiliki prioritas lebih tinggi daripada path yang ada dengan "menambahkan di depan" variabel PATH:
$ export PATH=/path/to/my/folder:$PATH
$ echo $PATH
/path/to/my/folder:/usr/bin:/bin:/usr/local/bin
Atau Anda dapat memberinya prioritas lebih rendah daripada path yang ada dengan "menambahkan di belakang" variabel PATH:
$ export PATH=$PATH:/path/to/my/folder
$ echo $PATH
/usr/bin:/bin:/usr/local/bin:/path/to/my/folder
Alasan ini bersifat sementara adalah karena saya hanya mengekspornya selama sesi bash saat ini.
Berkas bashrc atau .bash_profile
Jika saya ingin membuat perubahan saya agak lebih permanen, maka saya akan menambahkannya ke dalam berkas .bashrc atau .bash_profile. (Saya menyarankan menggunakan berkas .bashrc.) Berkas .bashrc/.bash_profile berada di dalam direktori home Anda (ditentukan oleh variabel lingkungan $HOME), dan merupakan berkas yang akan dijalankan pertama kali oleh interpreter bash saat dimuat. Ia akan menjalankan semua perintah di dalamnya. Artinya, Anda dapat mengubah variabel PATH dengan cukup menambahkan di dalam .bashrc Anda:
...other stuff above...
# Make /path/to/folder have higher priority
export PATH=/path/to/folder:$PATH
# Make /path/to/other/folder have lower priority
export PATH=$PATH:/path/to/folder
...other stuff below...
Data Science dan variabel lingkungan PATH
Sekarang, apa relevansinya bagi data scientist? Jika Anda seorang data scientist, besar kemungkinan Anda menggunakan Python, dan interpreter Python Anda berasal dari distribusi Anaconda Python (sangat bagus, silakan coba!). Installer Anaconda Python memprioritaskan folder /path/to/anaconda/bin dalam variabel lingkungan PATH. Anda mungkin memiliki interpreter Python lain yang terpasang di sistem Anda (misalnya, Apple menyertakan miliknya sendiri). Namun, modifikasi PATH ini memastikan bahwa setiap kali Anda mengetik python di terminal Bash, Anda menjalankan interpreter Python yang disertakan dalam distribusi Anaconda Python. Dalam kasus saya, setelah memasang distribusi Anaconda Python, PATH saya terlihat seperti:
$ echo $PATH
/Users/ericmjl/anaconda/bin:/usr/bin:/bin:/usr/local/bin
Lebih baik lagi, environment conda akan menambahkan path ke folder biner environment conda di depan saat environment diaktifkan. Misalnya, untuk blog saya, saya menyimpannya dalam environment bernama lektor. Jadi...
$ echo $PATH
/Users/ericmjl/anaconda/bin:/usr/bin:/bin:/usr/local/bin
$ which python
/Users/ericmjl/anaconda/bin/python
$ source activate lektor
$ echo $PATH
/Users/ericmjl/anaconda/envs/lektor/bin:/Users/ericmjl/anaconda/bin:/usr/bin:/bin:/usr/local/bin
$ which python
/Users/ericmjl/anaconda/envs/lektor/bin/python
Perhatikan bagaimana terminal bash kini lebih memprioritaskan Python di dalam environment lektor yang prioritasnya lebih tinggi.
Jika Anda sudah sampai di sini, semoga Anda menyadari ada beberapa konsep penting yang disebutkan. Mari kita rangkum:
PATHadalah variabel lingkungan yang disimpan sebagai string teks polos dan digunakan oleh interpreter bash untuk mencari tahu di mana menemukan program executable.PATHdipisahkan dengan tanda titik dua; direktori berprioritas lebih tinggi berada di sebelah kiri string, sedangkan direktori berprioritas lebih rendah berada di sebelah kanan string.PATHdapat dimodifikasi dengan menambahkan direktori di depan atau di belakang variabel lingkungan. Ini dapat dilakukan secara sementara di dalam sesi bash dengan menjalankan perintahexportpada prompt perintah, atau dapat dilakukan secara permanen lintas sesi bash dengan menambahkan barisexportdi dalam.bashrcatau.bash_profileAnda.
Variabel Lingkungan Lain yang Perlu Diperhatikan
Lalu, variabel lingkungan apa lagi yang mungkin ditemui data scientist? Berikut adalah beberapa contohnya yang mungkin Anda lihat, dan mungkin perlu Anda perbaiki, terutama dalam konteks ketika administrator sistem Anda sedang berlibur (atau terlalu lama merespons).
Untuk penggunaan umum, Anda pasti ingin tahu di mana folder HOME Anda — pada sistem Linux, sering kali /home/username, sedangkan pada sistem macOS, sering kali /Users/username. Anda dapat mengetahui nilai HOME dengan melakukan:
$ echo $HOME
/Users/ericmjl
Jika Anda pengguna Python, maka PYTHONPATH adalah salah satu variabel yang mungkin berguna. Variabel ini digunakan oleh interpreter Python, dan menentukan lokasi modul/paket Python.
Jika Anda harus berurusan dengan pustaka C++, maka mengetahui variabel lingkungan LD_LIBRARY_PATH akan sangat penting. Saya tidak cukup ahli untuk mengulasnya secara mendalam, jadi saya sarankan merujuk ke situs web ini untuk informasi lebih lanjut tentang praktik terbaik penggunaan variabel LD_LIBRARY_PATH.
Jika Anda bekerja dengan Spark, maka variabel lingkungan PYSPARK_PYTHON akan menarik. Ini pada dasarnya memberi tahu Spark Python mana yang akan digunakan untuk driver dan worker; Anda juga dapat menyetel PYSPARK_DRIVER_PYTHON terpisah dari variabel lingkungan PYSPARK_PYTHON, jika diperlukan.
Oprek Variabel Lingkungan Anda
Di sinilah bagian paling seru! Ikuti beberapa hal yang bisa Anda lakukan dengan mengoprek variabel lingkungan.
Oprek #1: Aktifkan akses ke PyPy. Sesekali saya mengikuti perkembangan PyPy, tetapi karena PyPy belum menjadi interpreter Python default, dan belum bisa di-conda install, saya harus menaruhnya di direktori $HOME/pypy/bin tersendiri. Untuk mengaktifkan akses ke interpreter PyPy, saya harus memastikan bahwa /path/to/pypy ada dalam variabel lingkungan PATH, namun dengan prioritas lebih rendah daripada interpreter CPython reguler saya.
Oprek #2: Aktifkan akses ke interpreter/kompiler bahasa lain. Ini mirip dengan PyPy. Saya pernah mencoba interpreter JIT Lua untuk menggunakan Torch dalam deep learning, dan perlu menambahkan path ke sana di .bashrc saya.
Oprek #3: Pasang paket Python ke direktori home Anda. Pada sistem komputasi Linux bersama yang menggunakan sistem modules alih-alih environment conda, sebuah modulefile yang Anda muat mungkin dikonfigurasi dengan virtual environment yang tidak Anda punya izin untuk memodifikasinya. Jika Anda perlu memasang paket Python, Anda mungkin ingin menjalankan pip install --user my_pkg_name. Ini akan memasangnya ke $HOME/.local/lib/python-[version]/site-packages/. Memastikan bahwa PYTHONPATH Anda menyertakan $HOME/.local/lib/python-[version]/site-packages dengan prioritas yang cukup tinggi akan penting dalam kasus ini.
Oprek #4: Debug saat ada masalah. Jika sesuatu memunculkan error, atau Anda mengalami perilaku yang tak terduga — misalnya yang pernah saya alami adalah interpreter Python saya tidak ditemukan dengan benar setelah memuat semua modul Linux — maka cara untuk debug adalah dengan sementara menyetel variabel lingkungan PATH Anda ke nilai "default" yang masuk akal dan melakukan source, sehingga secara efektif "mereset" variabel PATH Anda, lalu Anda bisa menambahkan di depan/belakang secara manual saat debugging.
Untuk melakukannya, tempatkan baris berikut di dalam berkas bernama .path_default, di dalam direktori home Anda:
export PATH="" # resets PATH to an empty string.
export PATH=/usr/bin:/bin:/usr/local/bin:$PATH # this is a sensible default; customize as needed.
Setelah terjadi masalah, Anda dapat mereset variabel lingkungan PATH dengan menggunakan perintah "source":
$ echo $PATH
/some/complicated/path:/more/complicated/paths:/really/complicated/paths
$ source ~/.path_default
$ echo $PATH
/usr/bin:/bin:/usr/local/bin
Catatan - Anda juga dapat mengeksekusi perintah yang sama persis di dalam sesi bash Anda; interaktivitasnya juga bisa membantu.
Kesimpulan
Semoga Anda menikmati artikel ini, dan semoga ini memberi Anda, ehm, jalan ke depan setiap kali Anda menemui variabel lingkungan seperti ini!
