55520
# 環境

  * pipenv 2018.11.26
  * python 3.7

# 質問

`pipenv update`コマンドの`--dry-run`オプションと`--outdated`オプションの説明は、どちらも"List out-of-
date dependencies."と書かかれていました。

```

    $ pipenv update --help
    Usage: pipenv update [OPTIONS] [PACKAGES]...
    
      Runs lock, then sync.
    
    Options:
      --bare                   Minimal output.
      --outdated               List out-of-date dependencies.
      --dry-run                List out-of-date dependencies.
    ...
    
```

<https://pipenv.readthedocs.io/en/latest/#pipenv-update>

`--dry-run`オプションと`--outdated`オプションに違いはありますか？  
また違いがない場合、どちらを使った方がよいでしょうか？

なんとなくですが、どちらか一方のオプションが古くて、その内「非推奨オプション」になるのかなと思いました。
CC BY-SA 4.0
2019-06-04T14:32:14.793
55517
2019-06-04T17:04:52.360
19524
question
python pipenv
`pipenv update`の`--dry-run`オプションと`--outdated`オプションに違いはありますか？またどちらを使うべきですか?
# 回答

`pipenv update` に限っていえば、 **内容は等価であり、片方または両方指定しても同様である**
、というのが回答になります。また、内容が等価であるため、どちらを選ぶべきというのもなく、好みで良さそうです。

また、今後非推奨になる可能性についてですが、調べた限りそのような内容は見つかりませんでした。一般論として、行儀の良いアプリケーションはcliの操作体系でdeprecatedになる予定があるものは表示しない（が完全に非対応になるまで使用はできる）、またはその旨を併記するものと考えます。このため、近い将来にどちらか一方のオプションが突然使用不可能になる、ということは考えにくいでしょう。

# 補足

該当する `update` のcli実装が下記の通りになっており、484-485行目で `outdated` または `dry-run`
がTrueなら`outdated`の操作（List out-of-date dependencies.）を行う、というようになっています。

<https://github.com/pypa/pipenv/blob/b5643760e3581ce04df9e96e023e4f46dacf5994/pipenv/cli/command.py#L457-L531>

>
```

>         if not outdated:
>             outdated = bool(dry_run)
>  
```

>
> [pipenv/command.py
> 484-485行目](https://github.com/pypa/pipenv/blob/b5643760e3581ce04df9e96e023e4f46dacf5994/pipenv/cli/command.py#L484-L485)より抜粋

ただし、`pipenv update`以外のサブコマンドについては、等価ではないようです（`--dry-run`は `pipenv clean`
でも使えるようです）。
CC BY-SA 4.0
2019-06-04T15:23:24.007
55520
2019-06-04T15:23:24.007
29826
55517
answer
`update`と組み合わせた場合は最終的にどちらも同じ実行結果になるのかもしれませんが、  
`--dry-run`はpipenvコマンド以外でもよく使われるオプション名の一つです。

  * `--dry-run`  
コマンドをシミュレーション実行するが、実際の反映等は行わない(=更新されるパッケージ名の確認)。

  * `--outdated`  
古くなった(=更新される)パッケージ名を表示する。

[@PicoSushiさんの回答](https://ja.stackoverflow.com/a/55520/3060)にもありますが、`pipenv
clean --dry-run`とした場合には、「何がアンインストールされるのか確認のみ行う」になります。
CC BY-SA 4.0
2019-06-04T17:04:52.360
55524
2019-06-04T17:04:52.360
3060
55517
answer