尼克斯 - 塞爾:用孤立的環境簡化您的開發工作流程
厭倦了在不同項目中雜亂無章的軟件版本? Nix-Shell提供了強大的解決方案!該工具使您可以創建孤立的開發環境,每個環境都根據特定項目的需求進行量身定制,以確保平穩且無衝突的工作流程。
這些孤立的環境阻止了項目之間的干擾,從而消除了軟件版本衝突時經常遇到的令人沮喪的“依賴地獄”。 Nix-Shell簡化了環境的創造和切換,確保了各種機器的一致設置,並提高了團隊協作效率。
本指南提供了使用Linux上的Nix-Shell創建和管理隔離開發環境的分步演練。
目錄
NIX是一個強大的軟件包管理器,並採用功能性和聲明性方法來依賴性管理。它將軟件包視為功能編程範式中的值。
尼克斯·塞爾(Nix-Shell)是一種與Nix軟件包管理器捆綁在一起的命令行工具,利用Nix表達式生成孤立的開發環境。這些環境封裝了給定項目的所有必要工具,庫和依賴項。
通過獨立建立每個依賴性並防止干擾,Nix-shell消除了“依賴性地獄”,並提供了對開發和生產環境中依賴關係的顆粒狀控制。這種隔離和可重複性確保了不同系統之間一致的設置,並促進了無縫開發人員的協作。
Nix-Shell創建了獨立的可重現環境,以管理項目依賴性,以防止衝突。
首先,創建一個定義項目依賴性的NIX表達式。這通常是一個名為default.nix
或shell.nix
的文件。
讓我們創建一個示例項目myproject
:
$ mkdir myproject $ cd myproject $ nano shell.nix
將以下內容添加到shell.nix
:
{pkgs?進口<nixpkgs> {}}: pkgs.mkshell { buildInputs = [ pkgs.python38 pkgs.nodejs pkgs.ruby ]; }</nixpkgs>
這定義了Python 3.8,Node.js和Ruby的環境。在此目錄中運行nix-shell
將隔離安裝。
更簡潔的版本:
{pkgs?進口<nixpkgs> {}}:pkgs.mkshell {buildInputs = with pkgs.buildpackages; [python38 nodejs ruby]; }</nixpkgs>
保存並關閉文件。
快速,臨時的環境
對於臨時環境,請使用
nix-shell -p package1 package2 ...
例如:Nix -shell -P Python39packages.numpy Python39packages.scipy登入後複製
使用以下方式輸入孤立的環境:
$ nix-shell
或者
$ nix-shell shell.nix
為了最大程度的隔離,請使用--pure
:
$ nix-shell-pure shell.nix
這將與指定的依賴關係創建外殼會話。
在Nix-Shell環境中,像往常一樣使用開發工具。孤立的環境可確保一致的依賴關係,而不論主機系統如何。
驗證已安裝的版本:
[nix -shell:〜/myproject] $ python -v [nix -shell:〜/myproject] $ node -v [nix -shell:〜/myproject] $ ruby -v
使用exit
或CTRL D
出口。退出會刪除臨時環境,將外殼設置轉移到其先前的狀態而不會影響您的系統。項目文件保持不變。可以通過nix-collect-garbage -d
)刪除NIX商店中的未使用軟件包。
問:什麼是尼克斯·希爾?答:具有特定軟件包的命令行工具創建臨時的,孤立的外殼環境。
問:如何安裝它?答:它是NIX軟件包管理器的一部分;首先安裝NIX。
問:如何創建一個孤立的環境?答:使用shell.nix
文件指定依賴項,或使用nix-shell -p ...
用於臨時環境。
問:它支持什麼?答:大多數類似Unix的系統(Linux,MacOS); Windows用戶可以使用WSL。
問:出口會發生什麼?答:刪除環境;外殼設置還原;保留項目文件。
問:如何避免“依賴地獄”?答:NIX的功能方法可確保孤立的軟件包構建,防止衝突。
問:我可以保存環境狀態嗎?答: shell.nix
文件可重現;對於更複雜的方案,請探索Nix的軟件包和配置功能。
問:如何添加/刪除軟件包?答:修改shell.nix
文件的buildInputs
列表或調整-p
標誌。
問:如何執行垃圾收集?答:使用nix-collect-garbage -d
。
Nix-Shell通過提供孤立的項目工作區來簡化開發。這樣可以防止衝突並確保整個機器之間的一致環境,從而使您可以專注於編碼而不是依賴關係管理。
資源:
相關文章:
以上是如何在Linux中使用Nix-Shell創建開發環境的詳細內容。更多資訊請關注PHP中文網其他相關文章!