(sharing-dependencies)=
# 개발 셸의 의존성

[`default.nix`에서 소프트웨어를 패키징](packaging-tutorial)할 때는 `nix-shell`로 편리하게 들어가거나 [`direnv`로 자동으로](./direnv) 들어갈 수 있는 [`shell.nix`의 개발 환경](declarative-reproducible-envs)이 필요합니다.

`default.nix`에 있는 패키지의 의존성을 `shell.nix`의 개발 환경과 어떻게 공유할 수 있습니까?

## 요약

[`pkgs.mkShellNoCC`의 `inputsFrom` 속성](https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-mkShell-attributes)을 사용하십시오:

```nix
# default.nix
let
  pkgs = import <nixpkgs> {};
  myPackage = pkgs.callPackage ./package.nix {};
in
{
  inherit myPackage;
  shell = pkgs.mkShellNoCC {
    inputsFrom = [ myPackage ];
  };
}
```

`shell.nix`에서 `shell` 속성을 가져오십시오:

```nix
# shell.nix
(import ./.).shell
```

## 전체 예제

패키지가 `package.nix`에 정의되어 있다고 가정합니다:

```nix
# package.nix
{ cowsay, runCommand }:
runCommand "cowsay-output" { buildInputs = [ cowsay ]; } ''
  cowsay Hello, Nix! > $out
''
```

이 예제에서 `cowsay`는 `buildInputs`를 사용하여 빌드 시점 의존성으로 선언되어 있습니다.

또한 프로젝트가 `default.nix`에 정의되어 있다고 가정합니다:

```nix
# default.nix
let
  nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-23.11";
  pkgs = import nixpkgs { config = {}; overlays = []; };
in
{
  myPackage = pkgs.callPackage ./package.nix {};
}
```

`default.nix`에 환경을 지정하는 속성을 추가하십시오:


```diff
 let
   nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-23.11";
   pkgs = import nixpkgs { config = {}; overlays = []; };
 in
 {
   myPackage = pkgs.callPackage ./package.nix {};
+  shell = pkgs.mkShellNoCC {
+  };
 }
```

`myPackage` 속성을 재사용할 수 있도록 `let` 바인딩 안으로 옮기십시오. 그런 다음 [`inputsFrom`](https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-mkShell-attributes)으로 패키지의 의존성을 환경에 가져오십시오:

```diff
 let
   nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-23.11";
   pkgs = import nixpkgs { config = {}; overlays = []; };
+  myPackage = pkgs.callPackage ./package.nix {};
 in
 {
-  myPackage = pkgs.callPackage ./package.nix {};
+  inherit myPackage;
   shell = pkgs.mkShellNoCC {
+    inputsFrom = [ myPackage ];
   };
 }
```

마지막으로 `shell.nix`에서 `shell` 속성을 가져오십시오:

```nix
# shell.nix
(import ./.).shell
```

개발 환경을 확인하십시오. 빌드 시점 의존성인 `cowsay`가 포함되어 있습니다:

```console
$ nix-shell --pure
[nix-shell]$ cowsay shell.nix
```

## 다음 단계

- [](pinning-nixpkgs)
- [](./direnv)
- [](python-dev-environment)
- [](packaging-tutorial)
