Tinjauan multibahasa tentang cara menangani ketergantungan dalam proyek penelitian – Beragampengetahuan
Oleh: Julia | Victor Bousange
Diposting ulang dari:
Diri Anda di masa depan dan orang lain akan dapat menciptakan kembali lingkungan minimal untuk menjalankan skrip dalam proyek penelitian Anda. Ini paling baik dicapai dengan menggunakan manajer paket Dan lingkungan maya.
Postingan ini adalah bagian dari seri praktik terbaik untuk mengelola kode proyek penelitian. Sebagian besar materi ini dikembangkan bekerja sama dengan Mauro Werder sebagai bagian dari Kursus Penelitian yang Dapat Direproduksi, Saluran Data, dan Komputasi Ilmiah (CORDS). Jika Anda memiliki pengalaman untuk dibagikan atau menemukan kesalahan, silakan menghubungi kami!
Contents
Isi
Beberapa definisi
Apa itu ketergantungan?
SATU ketergantungan adalah paket eksternal yang diperlukan proyek untuk dijalankan.
Apa itu manajer paket?
SATU manajer paket sama conda, Pkg atau renv mengotomatiskan instalasi, peningkatan, konfigurasi, dan manajemen ketergantungan. Biasanya bergantung pada satu gudang paketadalah lokasi pusat yang menyimpan kode sumber paket di satu tempat atau di mana ia ditemukan.
Apa itu lingkungan virtual?
SATU lingkungan maya adalah lingkungan terisolasi tempat Anda dapat menginstal dan mengelola dependensi secara terpisah dari proses instalasi seluruh sistem. Isolasi ini memastikan bahwa proyek yang berbeda dapat memiliki dependensi dan versi paket yang berbeda tanpa menimbulkan konflik. Mengapa Anda harus menggunakan lingkungan virtual?
- Bagi Anda sendiri, cara terbaik untuk menangani banyak proyek dan mencegah kode Anda rusak seiring waktu.
- Tanpa menentukan lingkungan virtual, Anda menginstal paket di lingkungan dasar, yang digunakan bersama di seluruh proyek Anda.
- Bayangkan Anda bekerja dengan Proyek A dan Proyek B, keduanya bergantung pada Package1 (saat ini @v1.1).
- Anda mengesampingkan Proyek A selama beberapa bulan dan fokus pada Proyek B.
- Fitur baru di Package1 mendorong Anda untuk meningkatkan ke v1.2, yang mengubah API atau perilaku fungsi yang digunakan di kedua proyek.
- Lalu Anda ingin kembali ke Proyek A, tetapi sekarang semuanya rusak! Karena kode Anda sudah diformat agar berfungsi dengan Package1@v1.1.
- Oleh karena itu, Anda ingin memastikan untuk memisahkan lingkungan.
- Untuk berbagi lingkungan Anda dengan individu dan mesin lain.
- Lingkungan virtual melacak ketergantungan minimal, dapat dengan mudah dibagikan dan diinstal pada mesin lain (misalnya HPC).
Manajer paket
Ikhtisar multibahasa
| ular piton | R | Julia | |
|---|---|---|---|
| Manajer Paket | pip, conda (lihat selengkapnya mamba), poetry |
install.packages() (basis R) |
Pkg |
| Repositori paket | PyPI (Indeks Paket Python), conda-forge |
CRAN (Jaringan Arsip R Komprehensif) | Daftar umum |
| Format distribusi | .whl (roda, termasuk biner) atau tar.gz (sumber) |
.tar.gz (sumber dan/atau biner) |
Pkg akan git clone dari sumber dan mengunduh artefak (biner). |
| Lingkungan maya | venv, virtualenv, conda env |
renv |
Bawaan Pkg modul |
| Manajemen ketergantungan | requirements.txt atau Pipfile (pip), atau environment.yml (conda env) atau pyproject.toml (poetry) |
DESCRIPTION, NAMESPACE |
Project.toml, Manifest.toml, Artifacts.toml |
Tabel ini sangat terinspirasi oleh artikel The Scientific Coder tentang manajer paket.
Julia atau R memiliki manajer paket bawaan yang dapat dipanggil dalam REPL tetapi manajer paket Python dipanggil dari luar bahasa tersebut.
conda
conda adalah manajer paket yang cocok untuk proyek ilmiah dengan Python. Ini lebih tua dari orang-orang sezamannya pipitu dapat menangani versi python dan semua jenis artefak ketergantungan non-python. Dengan dua baris kode, memungkinkan seseorang menginstal lingkungan virtual dengan cepat tanpa perlu menginstal python terlebih dahulu.
Berikut beberapa hal penting conda memerintah.
conda create --name myenv # creates new virtual environment
conda activate myenv # activate the environment
conda install numpy -c conda-forge # install a package
conda deactivate
Catatan: Jangan gunakan -c conda-forge akan baik-baik saja, tapi apa itu? conda-forge merupakan kegiatan yang berorientasi pada komunitas saluran (repositori dalam istilah python) biasanya memiliki lebih banyak paket terkini dan pilihan yang lebih luas daripada repositori Anaconda default. Anda harus menggunakannya karena berbagai alasan, tetapi terutama karena conda-forge biasanya memiliki jumlah paket terbanyak dan versi terbaru
Perhatikan bahwa beberapa paket hanya tersedia melalui PyPi (pip). Namun Anda terlindungi untuk itu: Anda dapat menginstalnya pip paket dalam satu conda envdengan mengaktifkan terlebih dahulu conda env dan kemudian gunakan secara normal pip. pip harus menjadi bagian dari ketergantungan Anda. Selalu mencoba untuk menginstal paket menggunakan conda Pertama.
Kami merekomendasikan untuk menggunakannya mamba sebagai pengganti drop-in untuk condauntuk penggunaan lebih cepat.
Beberapa sumber daya yang bermanfaat
renv
Berikut adalah beberapa dasar tentang cara menggunakannya renvtetapi lihat sketsa renv dan dokumentasi untuk penggunaan lebih lanjut.
# Initialize renv in your project
renv::init(project = "path/to/environment")
# Install a package and snapshot the environment
install.packages("dplyr")
renv::snapshot()
# Load the renv environment for the project
renv::activate()
# Restore the project's dependencies
renv::restore()
renv::update()
renv::history()
renv::revert()
Pkg
using Pkg
# Create a new project environment
Pkg.activate("path/to/MyProject")
# Add packages to the project environment
Pkg.add("DataFrames")
Anda juga dapat menggunakan REPL Julia dengan mengetik ]
(@v1.10) pkg> add DataFrames
atau string makro pkg"add DataFrames"
Tidak di Julia, lingkungan bersama global diwarisi dalam lingkungan kustom. Ini mungkin berguna!
Anda harus menginstal paket utilitas yang akan Anda gunakan untuk pengembangan tetapi tidak diperlukan untuk menjalankan kode Anda di lingkungan global. Misalnya makro @btime dari BenchmarkTools sangat berguna untuk kode profil. Tapi Anda mungkin tidak menginginkannya BenchmarkTools dalam ketergantungan Anda. Instal saja di base dan Anda akan dapat meneleponjulia using BenchmarkTools
di lingkungan khusus Anda.
Paket tambahan lain yang perlu dipertimbangkan untuk lingkungan global Anda adalah
Test,TestEnv,ReviseLocalRegistry
File lingkungan
File lingkungan menentukan versi pasti dari dependensi di lingkungan virtual Anda dan digunakan oleh manajer paket untuk menginisialisasi lingkungan. Biasanya mereka .txt, .toml atau .yml mengajukan.
Selalu kontrol versi file lingkungan Anda!
Julia
Di Julia, lingkungan ditentukan oleh dua file: file Project.toml Dan Manifest.toml. itu Project.toml file mencantumkan ketergantungan langsung, sementara Manifest.toml file mencatat grafik ketergantungan penuh, termasuk semua ketergantungan transitif. itu Manifest.toml File tersebut mungkin tidak dilacak dalam proyek dan akan dibuat ulang jika hilang. Ini menentukan versi lingkungan yang tepat. Untuk mereproduksi, Anda ingin menyertakan Manifest.toml di repo git Anda.Artifacts.toml digunakan untuk menangani dependensi paket non-Julia.
Contoh proyek.toml
authors = ["Some One ",
"Foo Bar "]
name = "MyEnv"
uuid = "7876af07-990d-54b4-ab0e-23690620f79a" # mandatory for packages
version = "1.2.5"
[deps]
DataFrames = “7876af07-990d-54b4-ab0e-23690620f79a”
Plots = “8dfed614-e22c-5e08-85e1-65c5234f0b40”
[compat]
CUDA = “4.4, 5”
julia = “1.10”
Saat Anda berada di direktori root dari proyek yang memuatnya .toml file, mulai Julia dengan
Ini akan membebani lingkungan. Jika ini adalah pertama kalinya Anda menggunakannya, Anda perlu menginisialisasinya
(Example) pkg> instantiate
Beberapa sumber daya yang bermanfaat
ular piton
conda env membaca .ymlboleh mengambil nama apa pun. .yml file tidak dibuat secara otomatis! Membuat environment.yml dengan
conda env export --name machine-learning-env --from-history --file environment.yml
Ini menciptakan satu hal environment.yml dokumen
contoh lingkungan.yml
name: machine-learning-env
channels:
dependencies:
Jangan gunakan --from-history akan menghasilkan daftar semua dependensi, yang diinstal secara eksplisit DAN implisit. Ini bisa menjadi sedikit lebih rumit.
Untuk menentukan pip paket, cukup masukkan .toml
- pip=19.1
- pip:
- kaggle==1.5
- yellowbrick==0.9
Perhatikan ‘==’ ganda, bukan ‘=’ untuk instalasi pip, dan Anda harus memasukkan pip itu sendiri sebagai dependensi dan kemudian tambahan yang mewakili paket-paket yang akan diinstal melalui pip. Juga, perhatikan itu --from-history tidak akan menangkap dependensi pip. Jadi cara terbaik untuk melanjutkan adalah menentukan dependensi secara manual.
Instal dari environment.yml
mamba env create --prefix ./.env --file environment.yml
Beberapa sumber daya tambahan
R
Lingkungan dengan renv ditentukan dalam a renv.lock Dan DESCRIPTION mengajukan. Ini adalah file JSON dengan dua komponen utama: R dan Paket. Komponen R menentukan versi R yang digunakan dan daftar repositori tempat paket diinstal. Komponen Paket menyertakan catatan untuk setiap paket yang digunakan dalam proyek, dengan semua detail yang diperlukan untuk menginstal ulang versi persisnya. Detail ini diambil dari paket yang diinstal DESCRIPTION file dan termasuk instalasi dari sumber mana pun, termasuk CRAN, Bioconductor, GitHub, Gitlab, dan Bitbucket. Untuk informasi lebih lanjut tentang sumber yang didukung, lihat sketsa (“sumber paket”).
renv.lock
"R":
"Version": "4.3.3",
"Repositories": [
"Name": "CRAN",
"URL": "
]
,
"Packages":
"markdown":
"Package": "markdown",
"Version": "1.0",
"Source": "Repository",
"Repository": "CRAN",
"Hash": "4584a57f565dd7987d59dda3a02cfb41"
,
"mime":
"Package": "mime",
"Version": "0.12.1",
"Source": "GitHub",
"RemoteType": "github",
"RemoteHost": "api.github.com",
"RemoteUsername": "yihui",
"RemoteRepo": "mime",
"RemoteRef": "main",
"RemoteSha": "1763e0dcb72fb58d97bab97bb834fc71f1e012bc",
"Requirements": [
"tools"
],
"Hash": "c2772b6269924dad6784aaa1d99dbb86"
Bekerja dengan lingkungan interaktif
Buku catatan Jupyter yang dapat digunakan Pkg, conda Dan renv Lingkungan Conda, tetapi Anda mungkin memerlukan beberapa langkah tambahan (lihat cara membuat Jupyter mengetahui lingkungan Conda Anda di sana-sini. Anda tidak perlu mengikuti langkah-langkah ini jika Anda menggunakan Visual Studio Code.
Solusi buku catatan interaktif lainnya menyimpan lingkungan secara langsung dalam file, yang sangat bagus untuk tujuan reproduktifitas. Inilah yang terjadi Pluto notebook, dirancang agar dapat direproduksi. Di bawah tenda, mereka berisi lingkungan paket di dalamnya Binder laptop juga memiliki lingkungan virtual, tetapi gunakan Docker (lihat di bawah dan instruksi di sini).
Secara pribadi, saya tidak suka buku catatan dan lebih suka menggunakan skrip dalam Visual Studio Code, menjalankannya baris demi baris untuk dikembangkan dengan data. Julia ekstensi atau ekstensi Jupyter dengan "jupyter.interactiveWindow.textEditor.executeSelection": true. Dengan pendekatan seperti itu, Anda dapat menentukan lingkungan virtual mana yang akan digunakan saat masuk dan tidak perlu mengkhawatirkannya lagi nanti.
Hati-hati dengan lingkungan virtual
Beberapa paket/perpustakaan bergantung pada perpustakaan sistem dan utilitas; Misalnya pytorch mengandalkan driver CUDA khusus untuk mesin tertentu (lihat bagaimana Anda dapat menangani driver CUDA menggunakan conda di sini) atau perilaku paket saya bergantung pada variabel lingkungan sistem. Jadi, dengan mereplikasi lingkungan virtual, Anda belum tentu menciptakan kembali lingkungan komputasi yang sama persis.
Untuk lebih meniru lingkungan komputasi, wadah dapat digunakan Kontainer memvirtualisasikan lapisan sistem operasi, mereplikasi lebih dalam ke lingkungan dan membuatnya lebih dapat direproduksi. Docker atau Singularity adalah solusi populer. Sayangnya, membuat container bisa jadi sulit, dan virtualisasi dapat menambah kerumitan pada proses Anda…
Namun lihat Menggunakan Singularitas sebagai Lingkungan Pengembangan dan Cara Mengontrol Pengembang dari Jarak Jauh dengan vscode dan Singularitas. Perhatikan bahwa Anda dapat menggunakan container dan lingkungan virtual… Lihat di sini untuk petunjuknya renv.
Beberapa sumber daya tambahan
Untuk informasi selengkapnya, lihat Lingkungan komputasi yang dapat direproduksi menggunakan kontainer: Pengenalan Docker.
Topik lanjutan: pengembangan paket
Masuk akal bagi proyek penelitian untuk membedakan skrip yang ditempatkan di dalamnya scripts/ dan fungsi, model, dll. yang digunakan kembali ditempatkan di dalamnya src. Kami akan membahasnya lebih luas di artikel lain. Dalam kasus seperti itu, yang terbaik adalah memisahkan dependensi agar memiliki lingkungan kerja minimum src/ fungsi dan kelas, terlepas dari itu untuk Anda scripts. Pendekatan praktis untuk hal ini adalah dengan menentukan src folder sebagai sebuah paket. Hal ini mempunyai beberapa keuntungan antara lain
- Anda tidak perlu berurusan dengan lokasi relatif file untuk memanggil fungsi internal
src/ - Maksimalkan produktivitas Anda dengan membuat paket umum yang melengkapi proyek penelitian utama Anda.
Anda dapat mencapainya dengan mudah menggunakan alat pengembang.
Untuk Python, alat seperti setuptools Dan poetry Memfasilitasi pengembangan paket. Jika Anda bekerja di R, devtools adalah alat penting untuk mengembangkan paket. Di Julia, Pkg alat memiliki tujuan serupa.
Templat paket dapat berguna untuk menyederhanakan pembuatan paket dengan membuat bingkai paket. Dengan Python, pembayaran cookiecutter. Di R, periksa usethis. Untuk Julia, gunakan Pkg.generate() fungsionalitas yang lebih terintegrasi atau canggih PkgTemplates.jl paket.
Perhatikan bahwa terkadang Anda mungkin ingin menentukan lokasi Anda src/ (dan terkait tests, docsdll…) di repositori git terpisah.
Beberapa sumber daya tambahan
Bawa pulang pesan
- Pastikan Anda memahami manajer paket, lingkungan virtual, dan dependensi baik dalam skrip proyek Anda maupun di tingkat sistem.
- Dokumentasikan dengan jelas semua dependensi dan instruksi pengaturan lingkungan di repositori proyek.
- Memberikan instruksi dalam satu Pengaturan bagian dalam
readme.mdtentang cara mengatur lingkungan virtual. - Lihat repositori penelitian mainan ini di Julia (yang menggunakan jalur relatif untuk mengimpor
srcfungsi), Python (yasrcsebagai paket) dan R (yasrcsebagai sebuah paket) melakukan apa yang saya yakini sebagai contoh proyek penelitian yang bagus!
Terkait
Software Terbaru Saat Ini
Aplikasi yang sedang trend saat ini
object oriented programming, programming language, programming adalah, web programming, belajar programming, tournament software, software, software adalah, contoh software, apa itu software, pengertian software, aplikasi, aplikasi penghasil uang, aplikasi bokep, aplikasi video, programming
#Tinjauan #multibahasa #tentang #cara #menangani #ketergantungan #dalam #proyek #penelitian