ライブラリ管理ツールでは、
pip showで依存関係が出るが、
バージョン管理の依存関係とは、例えばあるAライブラリがある。
そのAライブラリはまた別のBライブラリを使用して作成されている場合がある。
そうなるとAライブラリをインストールしても、Bライブラリが古いまたは入っていないと動かないみたいなことがありえる。
なのでバージョン管理でインストールすることで、そういった依存関係(別のライブラリとの)も考えてインストールしてくれる。
Aライブラリを入れても、Bライブラリのバージョンが8.0以上でないと使用できないのであれば、Bライブラリのバージョンも自動的に8.0に、それか入っていないならBライブラリもインストールしてくれる。
以下のように、その他のライブラリで何を使っているかの依存関係を表示してくれる。
気軽にライブラリを構築できるようになり、世界で自分が作成したライブラリを共有できる時代です。
その中で、不特定多数の人が、既存の便利なライブラリをつかって新しい便利なライブラリを構築していきます。
そして利用者はそのライブラリを使用したくダウンロードして使おうとすると、
そのライブラリの中で利用している別のライブラリが入っていないためエラーになってしまいました。
こうなっていくと、どんどん深いところまでさまざまなライブラリが使われていて、それら全てを1つずつコードのrequireを見て、どのライブラリを入れているのかを
見ていくとなると途方に暮れます。
さらに見て行った後は、それらをインストールしていかないといけないです。面倒。
なので、これを解消してそのライブラリに必要なライブラリや別ファイルも一貫してインストールできるようになったのが、
以下で挙げるようなライブラリ管理ツールとなります。
言語によってさまざまなライブラリ管理ツールがあります。
- PHPのライブラリ管理ツール:composer
- Pythonのライブラリ管理ツール:pip
- Javascriptのライブラリ管理ツール:npm
当然、macOSやwindowsもさまざまなライブラリ管理ツールがあります。
- macOSのライブラリ管理ツール:Homebrew
- windowsのライブラリ管理ツール:chocolatey
- linuxOSのRedHat系のディストリビューション(例: CentOS7)のライブラリ管理ツール:yum
- linuxOSのDebian系のディストリビューション(例: Ubuntu)ライブラリ管理ツール:apt-get
apt-getコマンドは、Debian系のディストリビューション(DebianやUbuntu
以下では言語PHP、Python、javascriptのライブラリ管理ツールについて見ていきます。
バージョン管理の基本的なコマンド一覧
自分がよく使用する言語として、
php、pythonとjavascript(nodejs)があります。
それらのバージョン管理ソフトと、基本的なコマンドを整理したいと思います。
言語 | PHP | Python | Javascript |
---|---|---|---|
バージョン管理 | composer | pip | npm |
バージョン管理 インストール | brew install composer | brew install pip | brew install npm |
初期化 | composer init | pip init | npm init |
初期化によるメリット | composer.json、composer-lock.json、vendorが作成される | requirements.txtが作成される | package.jsonとpackage-lock.json、node_modulesフォルダが作成される |
インストール | composer install | pip install (windowsはpython -m pip install) |
npm install |
アンインストール | composer uninstall | pip uninstall (windowsはpython -m pip uninstall) |
npm uninstall |
リスト | composer list | pip list (windowsはpython -m pip list) |
npm list |
依存関係 | composer show | pip freeze | ? |
もう覚え方は簡単ですね。
バージョン管理の細く説明
== バージョン管理を入れる ==
macにバージョン管理を入れたいのであれば、brew install ※ macのバージョン管理はHomebrew
windowsにバージョン管理を入れたいのであれば、choco install ※ windowsのバージョン管理はchocolatey
== バージョン管理入れた後の設定 ==
初期化したいのであれば、init
そのまま、ライブラリをインストールするのであれば、install
そのバージョン管理でインストールしたライブラリの一覧を見たいのであれば、list
そのバージョン管理のバージョンを確認したいのであれば、 -vか-version
※ windowsでpythonのライブラリであるpipコマンドを使用したい場合は、python -m pip installのようにプレフィックスにpython -mをつけて実行する。
npm initで今いるディレクトリに
package.jsonなど作成する。
そこに欲しいライブラリを記載していく。
それか今いるディレクトリでnpm install firebaseとすると、
package.json作成してくれるが、
さらに中身にfirebaseが追加される。
node_modulesも。
さらにそこで別のライブラリをインストールするとpackage.jsonに記載してくれるのかな?依存関係で
node installでpackage.jsonに記載あるものがインストールされる
npm install --save-dev grunt
とすると、このライブラリgruntというものをインストールしつつ、packagejsonにも書いてくれる。(-devとあるので、devDependenciy:開発環境用に記載される)
npm install --save ライブラリ
で、dependencyに書いてくれる。(dependencyは本番環境用)
https://qiita.com/akkey2475/items/4c1eb3e3f36f705c7a1c
これいいじゃん。普通に今までpipでインストールしてきたライブラリを
pip freezeで取得でき、その形式のままrequirements.txtに出力すれば
pip installでそのままインストールできるから、簡単に整理できる
WindowsにPythonをデフォルトでインストールした状態では、pipをそのまま実行することができません(PATHが通っていないため)。以下のようにpy -mを付けると実行できます。
py -m pip install pypdf2
pip uninstall pypdf2
Pythonのライブラリ管理ツールについて
開発しているとき、さまざまなライブラリをpipコマンドでインストールすると、
pipで何を入れたかわからなくなります。
開発環境などで色々入れていると、これを本番環境でも入れるとなると何を入れたか確認する必要があります。
入れたものを一覧で見るコマンドが、
pip freeze
です。
これを実行すると以下のように、pipで入れたライブラリはもちろん、その最新バージョンも表示されます。
そしてこの形式どこかで見たことがあるような・・・
requirements.txtの記載の仕方と同じ表示になっています。
なので、
pip freeze > requiremens.txt
とすれば、あとでpip installで一括インストールする際に
本番環境に移した際も問題なくインストールすることが可能になります。
↑ でもそうなると、mac内に複数のプロジェクトがある場合、macでnpmで実行すると、AプロジェクトではAライブラリ必要だけど、BプロジェクトではAライブラリはいらない。
でもnpm freezeを実行するとBプロジェクトのrequirements.txtにAライブラリも入ってしまうのでは?
どこにインストールされる?
macOSであれば、
brew install pythonとかは、
通常pythonコマンドは、python.exe内やパスが通っているところでないと実行できないが、
どこでもpythonコマンドが実行できる。
これはpythonのインストール先がすでに環境変数のPATHに含まれており、そのパス上にpython.exeが入っているから。
確認としては
sudo vi ~/.bash_profileか、
sudo vi ~/.bashrc
で確認可能。
主に、bash_profileはPCを起動した際に読み込まれる環境設定ファイルのことで、
bashrcは、ユーザーがログインした際に読み込まれる環境設定ファイルのことです。
bash_profileは
export PATH="$HOME/bin:$PATH"
export PATH="$HOME/usr/bin/git:$PATH"
上記パスの中に、pythonが入っていて、python.exeもあるので、macのどこでも実行可能になる。
言語ごとのライブラリ管理ツールは、
コマンド実行したカレントディレクトリに生成される。