Casual Developers Note

エンジニアやデザイナー向けの技術情報・英語学習情報・海外留学情報・海外旅行情報を提供中。世界を旅して人生を楽しもう。

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • お問い合わせ
現在の場所:ホーム / アーカイブpyenv

2018年11月26日 By KD コメントを書く

Pythonパッケージ管理の新標準Pipenv入門

Pythonパッケージ管理の新標準Pipenv入門

Pythonのパッケージ管理の仕組みは他のプログラミング言語と比較して使いにくいものでしたが、やっとPipenvという使いやすいパッケージ管理ツールが登場しました。今回はPipenvの簡単な使い方を紹介します。

はじめに

PyCon 2018のこちらの動画「Kenneth Reitz – Pipenv: The Future of Python Dependency Management」をご覧ください。英語が多少わかる方ならすぐにPipenvの良さが理解できたと思います。

Pythonの世界では、Pythonパッケージを管理する方法として、仮想環境(virtualenv/venv)を作り、その上にrequirements.txtを使ってパッケージを読み込む方法がずっと使われてきました。Pythonの世界から出たことがない人は気づかないかもしれませんが、例えば一歩JavaScriptの世界に足を踏み入れてみると、NPMやYarnを使い、ロックファイルの仕組み(プロジェクト単位で設定ファイルにパッケージのバージョンを指定したり、開発用とプロダクション用でインストールするパッケージを分けたりする方法)でパッケージを管理しています。この方法を知っていると、Pythonの今までの方法がいかに使いにくいか分かります。

そこで、このロックファイルの仕組をPythonの世界に持ち込み、新標準となりつつあるのがPipenvです。PipenvではJavaScriptのNPMやYarnと同じように、柔軟なパッケージのバージョン指定や開発用とプロダクション用のパッケージ分けを設定ファイルに書くことができ、パッケージのインストールと同時に仮想環境が生成されるので、開発フローが分かりやすく、よりシームレスになります。本当に便利です。

それでは、さっそく新しいPythonパッケージ管理ツール「Pipenv」に入門しましょう。

従来のパッケージ管理方法(PIP)

まずは、よく使われているPIPを使ったPythonパッケージの管理方法をおさらいしておきましょう。

PIPコマンドによるパッケージのインストールとエクスポート

プロジェクト用にvenvで仮想環境を構築し、その仮想環境上にPIPでパッケージをインストールします。その後、「pip freeze」で仮想環境上にインストールされているパッケージを「requirements.txt」に出力します。

$ python --version
Python 3.7.1
$ mkdir sample-flask-app-old-way
$ cd sample-flask-app-old-way/
$ python -m venv .venv
$ ls -a
./     ../    .venv/
$ source .venv/bin/activate
$ pip install --upgrade pip
$ pip --version
pip 18.1
$ pip install Flask flask_restful flask_cors marshmallow pymongo ptvsd pytest
$ pip list
Package        Version
-------------- -------
aniso8601      4.0.1
atomicwrites   1.2.1
attrs          18.2.0
Click          7.0
Flask          1.0.2
Flask-Cors     3.0.7
Flask-RESTful  0.3.6
itsdangerous   1.1.0
Jinja2         2.10
MarkupSafe     1.1.0
marshmallow    2.16.3
more-itertools 4.3.0
pip            18.1
pluggy         0.8.0
ptvsd          4.2.0
py             1.7.0
pymongo        3.7.2
pytest         4.0.1
pytz           2018.7
setuptools     39.0.1
six            1.11.0
Werkzeug       0.14.1
$ pip freeze > requirements.txt
$ cat requirements.txt
aniso8601==4.0.1
atomicwrites==1.2.1
attrs==18.2.0
Click==7.0
Flask==1.0.2
Flask-Cors==3.0.7
Flask-RESTful==0.3.6
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.0
marshmallow==2.16.3
more-itertools==4.3.0
pluggy==0.8.0
ptvsd==4.2.0
py==1.7.0
pymongo==3.7.2
pytest==4.0.1
pytz==2018.7
six==1.11.0
Werkzeug==0.14.1
$ deactivate

後は「requirements.txt」を使ってパッケージのバージョンを管理します。この方法には問題があります。それは、開発用のパッケージとプロダクション用のパッケージが混ざっている点です。これに対するメジャーな解決策はrequirements.txtを別名にして分割し、開発時とプロダクション時で別々のrequirements.txtを読み込む方法です。かなり面倒です。

PIPコマンドとrequirements.txtファイルによりパッケージのインストール

「requirements.txt」ファイルを作成し、それを使ってインストールします。

$ mkdir sample-flask-app-old-way2
$ cd sample-flask-app-old-way2/
$ vi requirements.txt
Flask==1.0.2
Flask-RESTful==0.3.6
Flask-Cors==3.0.7
marshmallow==2.16.3
pymongo==3.7.2
ptvsd==4.2.0
pytest==4.0.1
$ python -m venv .venv
$ source .venv/bin/activate
$ pip install --upgrade pip
$ pip install -r requirements.txt
$ pip list
Package        Version
-------------- -------
aniso8601      4.0.1
atomicwrites   1.2.1
attrs          18.2.0
Click          7.0
Flask          1.0.2
Flask-Cors     3.0.7
Flask-RESTful  0.3.6
itsdangerous   1.1.0
Jinja2         2.10
MarkupSafe     1.1.0
marshmallow    2.16.3
more-itertools 4.3.0
pip            18.1
pluggy         0.8.0
ptvsd          4.2.0
py             1.7.0
pymongo        3.7.2
pytest         4.0.1
pytz           2018.7
setuptools     39.0.1
six            1.11.0
Werkzeug       0.14.1
$ deactivate

「requirements.txt」で指定したバージョンのパッケージと依存関係のあるパッケージががインストールされました。

ここまでが従来のPIPによるパッケージ管理の方法でした。

新標準のパッケージ管理方法(Pipenv)

それでは、いよいよPipenvを使っていきましょう。

Pipenvのインストール

PIPからインストールできます。最新版をインストールする場合は以下のコマンドを実行しましょう。

$ pip install --user pipenv
$ pip install --user --upgrade pipenv

バージョンを指定する場合は以下のようにします。

$ pip install --user pipenv==2018.10.13

あるいは、MacからHomebrewでインストールすることもできます。その場合は以下になります。

$ brew install pipenv

Pipenvの設定

Pipenvを使うと自動的に仮想環境が作られるのですが、そのパスをプロジェクト内に指定したい場合は「PIPENV_VENV_IN_PROJECT=1」を「.bash_profile」や「.bashrc」などに設定する必要があります。

$ echo "export PIPENV_VENV_IN_PROJECT=1" >> ~/.bash_profile

この設定をしておけば「pipenv install」実行時にプロジェクト内に「.venv」という名前の仮想環境が構築されるので、扱いやすいです。

Pipenvのサポート情報の確認

Pipenvのバージョン、指定できるPythonバージョンのリスト、パスの設定内容などを確認してみましょう。

$ pipenv --version
pipenv, version 2018.10.13
$ pipenv --support
$ pipenv --support Pipenv version: `'2018.10.13'` Pipenv location: `'/Users/user/.local/lib/python3.7/site-packages/pipenv'` Python location: `'/Users/user/.anyenv/envs/pyenv/versions/3.7.1/bin/python3.7'` Python installations found: - `3.7.1`: `/Users/user/.anyenv/envs/pyenv/shims/python` ...

この時点でエラーになった場合はPipenvのissueを確認してみましょう。ちなみに執筆時点では最新の「2018.11.14」はMac OS上ではエラーで動かないので、一つ前のバージョン「2018.10.13」を使っています。

Pipenvによる初期化

今回用のプロジェクトディレクトリを作成し、Pipenvの初期化をしてみましょう。

$ mkdir sample-flask-app-new-way
$ cd sample-flask-app-new-way/
$ pipenv install
$ ls -a
./            ../           .venv/        Pipfile       Pipfile.lock
$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.7"

この時点で仮想環境「.venv」が自動的に作成され、「Pipfile」と「Pipfile.lock」のロックファイルが作成されます。もしすでにこれらのファイルが存在する場合は、指定されているパッケージが自動的にインストールされます。なので、この2つのファイルはGitで管理することになります。(JavaScriptの「package.json」と「package-lock.json」と同じですね。)

Pipfileの詳しい書き方は公式ドキュメントを参照すると良いでしょう。

Pipenvによるパッケージのインストール

次にPipenvで、プロダクション用のパッケージと開発用のパッケージを分けてインストールしてみましょう。

$ pipenv install Flask==1.0.* flask_restful==0.3.* flask_cors==3.0.* marshmallow==2.16.* pymongo==3.7.*
$ pipenv install --dev ptvsd pytest
$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
flask = "==1.0.*"
flask-restful = "==0.3.*"
flask-cors = "==3.0.*"
marshmallow = "==2.16.*"
pymongo = "==3.7.*"

[dev-packages]
ptvsd = "*"
pytest = "*"

[requires]
python_version = "3.7"

分けてインストールできました。

Pipenvによるパッケージのアップデート

古くなっているパッケージを確認して、アップデートします。

$ pipenv update --outdated
$ pipenv update

パッケージを指定してアップデートする場合は以下のようにします。

$ pipenv update Flask

Pipenvによるパッケージのアンインストール

パッケージ名を指定してアンインストールする場合は以下のようにします。この場合は、仮想環境とPipfileの両方から削除されます。

$ pipenv uninstall Flask

仮想環境だけからパッケージを全てアンインストールする場合は以下のようにします。この場合はPipfileはそのまま残ります。

$ pipenv uninstall --all

開発用のパッケージだけを全てアンインストールする場合は以下のようにします。この場合は、開発用に限り、仮想環境とPipfileの両方から削除されます。

$ pipenv uninstall --all-dev

Pipenvで仮想環境の削除

仮想環境(.venv)を削除するには以下のコマンドを実行します。

$ pipenv --rm

Pipenvでrequirements.txtからインストール

Pipenvを使う場合は、Pipfileがrequirements.txtの代替になります。なので、Pipenvを前提とした場合はrequirements.txtは不要になるのですが、移行する場合などはまだrequirements.txtからインストールする場面があるかもしれません。やってみましょう。

$ mkdir sample-flask-app-import-old-way
$ cd sample-flask-app-import-old-way/
$ vi requirements.txt
Flask==1.0.2
Flask-RESTful==0.3.6
Flask-Cors==3.0.7
marshmallow==2.16.3
pymongo==3.7.2
ptvsd==4.2.0
pytest==4.0.1
$ ls -a
./                ../               requirements.txt
$ pipenv install
$ ls -a
./                ../               .venv/            Pipfile           Pipfile.lock      requirements.txt
$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
marshmallow = "==2.16.3"
pymongo = "==3.7.2"
ptvsd = "==4.2.0"
pytest = "==4.0.1"
Flask = "==1.0.2"
Flask-RESTful = "==0.3.6"
Flask-Cors = "==3.0.7"

[dev-packages]

[requires]
python_version = "3.7"

Pipenvではインストール時にPipfileが存在せず、requirements.txtが存在する場合は、自動的にrequirements.txtからインポートします。自分でrequirements.txtファイルを指定する場合は以下のようにします。

$ pipenv install -r requirements.txt

Pipenvによるシェル実行

仮想環境の有効や無効を切り替えるために、従来はactivateとdeactivateを実行していましたが、Pipenvでは「pipenv shell」コマンドを実行することでactivsteされ、「exit」でdeactivateされます。さらに、仮想環境をactivateしないでも「pipenv run」コマンドを使うことで仮想環境内でPythonを実行できます。やってみましょう。

$ mkdir sample-flask-app
$ cd sample-flask-app
$ vi Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
Flask = "==1.0.2"
Flask-RESTful = "==0.3.6"
Flask-Cors = "==3.0.7"
marshmallow = "==2.16.3"
pymongo = "==3.7.2"

[dev-packages]
ptvsd = "==4.2.0"
pytest = "==4.0.1"

[requires]
python_version = "3.6"
$ pipenv install
Creating a virtualenv for this project…
Pipfile: /Users/user/sample-flask-app/Pipfile
Using /Users/user/.anyenv/envs/pyenv/versions/3.6.5/bin/python3.6 (3.6.5) to create virtualenv…
...
$ pipenv shell
(sample-flask-app)$ python --version
Python 3.6.5
(sample-flask-app)$ pip list
Package       Version
------------- -------
aniso8601     4.0.1
Click         7.0
Flask         1.0.2
Flask-Cors    3.0.7
Flask-RESTful 0.3.6
itsdangerous  1.1.0
Jinja2        2.10
MarkupSafe    1.1.0
marshmallow   2.16.3
pip           18.1
pymongo       3.7.2
pytz          2018.7
setuptools    40.6.2
six           1.11.0
Werkzeug      0.14.1
wheel         0.32.3
(sample-flask-app)$ exit
exit

Pipenvによるバージョン変更

PipenvではPythonのバージョンを指定することで、仮想環境をまるごと入れ替えられます。「–three」オプションを指定すると、すでに存在する仮想環境が削除され、ローカルにインストールされている最新のPython3の仮想環境が新しく作成されます。「–two」オプソンと指定すると同じことがPython2で行われます。「–python X.X.X」オプションを指定すると固定のPythonバージョンを指定できます。先程の続きからやってみましょう。

$ pipenv --three
Virtualenv already exists!
Removing existing virtualenv…
Creating a virtualenv for this project…
Pipfile: /Users/user/sample-flask-app/Pipfile
Using /Users/user/.anyenv/envs/pyenv/shims/python3 (3.7.1) to create virtualenv…
...
$ pipenv run python --version
...
Python 3.7.1
$ pipenv --two
Virtualenv already exists!
Removing existing virtualenv…
Creating a virtualenv for this project…
Pipfile: /Users/user/sample-flask-app/Pipfile
Using /usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/bin/python2.7 (2.7.15) to create virtualenv…
...
$ pipenv run python --version
...
Python 2.7.15
$ pipenv check
Checking PEP 508 requirements…
Specifier python_version does not match 3.6 (2.7).
Failed!
$ pipenv --python 3.6.5
Virtualenv already exists!
Removing existing virtualenv…
Creating a virtualenv for this project…
Pipfile: /Users/user/sample-flask-app/Pipfile
Using /Users/user/.anyenv/envs/pyenv/versions/3.6.5/bin/python3.6 (3.6.5) to create virtualenv…
...
$ pipenv check
Checking PEP 508 requirements…
Passed!
Checking installed package safety…
All good!
$ pipenv run python --version
Python 3.6.5

仮想環境とPipfileに不整合があるかどうかは「pipenv check」コマンドで確認しています。また、新しく作られた仮想環境はクリーンなので、必要に応じて「pipenv install」を再度実行してください。あるいは、「pipenv install –three」のように一緒にPythonのバージョンを指定することもできます。

おまけ(追記)

DockerでPipenvを使う

Docker上でPipenvを使う場合のDockerfileは以下のようになります。

FROM python:3.7.1-slim-stretch

WORKDIR /usr/src/app

RUN pip install --upgrade pip setuptools \
  && pip install pipenv==2018.11.26

COPY Pipfile ./
COPY Pipfile.lock ./
RUN pipenv install --deploy --system

COPY ./ ./

EXPOSE 5000

CMD python src/app.py

ポイントは、仮想環境を構築せずにシステムにインストールしている点です。Dockerではコンテナで環境が分離されるので仮想環境を使う必要がないためです。Pipenvでインストールする場合、開発用であれば「pipenv install --dev --system」、プロダクション用であれば「pipenv install --deploy --system」が良いと思います。後は、追加としてFlaskやDjangoなどのフレームワーク向けの環境変数などを追加すれば完璧です。

最後に

いかがでしたか?これでPipenvの基本的な使い方は理解できたと思います。まだ新しいツールですが、今後デファクトスタンダードになることは間違いないので、今のうちに使えるようになってしまいましょう。それでは。

環境

  • PC: macOS Mojava 10.14.1
  • Python: 3.7.1
  • PIP: 18.1
  • Pipenv: 2018.10.13

カテゴリ : 技術 Tips & Tutorials タグ : pyenv, python

2015年9月13日 By KD コメントを書く

[tips][Tool] MacでRubyとPythonとJavaとNodeとPerlの複数バージョンを管理する方法

[tips][Tool] MacでRubyとPythonとJavaとNodeとPerlの複数バージョンを管理する方法

iPhone6sですか?予約しました、Keidです。

今月で20代ラストの年になってしまいました。30代が目前になるといろいろと焦りますね。このままでいいのかなー的なやつです。割と真面目に未来予知できないかな(笑)

関係のない話はこのぐらいにして、今回はMacで5つのプログラミング言語(Ruby、Python、Java、Node、Perl)の複数バージョンの管理方法を紹介します。SCM的な意味ではなく、同じ環境内で同じ言語を複数バージョンインストールして、好きな時に好きなバージョンに切り替えれるようにします。Windowsを仕事でよく使う自分としてはWindowsの方法も紹介したかったのですが、このPCがMacという理由でMacに限定します。

<目次>

  1. rbenvによるRubyのバージョン管理方法
  2. pyenvによるPythonのバージョン管理方法
  3. jenvによるJavaのバージョン管理方法
  4. nodebrewによるNodeのバージョン管理方法
  5. perlbrewによるPerlのバージョン管理方法

1. rbenvによるRubyのバージョン管理方法

Rubyを複数バージョン管理するには「rbenv」を使用します。

まずはインストールしてみましょう。今回はhomebrewからruby-buid等の必要なパッケージと一緒にインストールします。パスは.bash_profileに設定します。

$ brew install openssl readline
$ brew install rbenv ruby-build
$ vi ~/.bash_profile
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
$ source ~/.bash_profile 
$ rbenv -v
rbenv 0.4.0
$ ruby-build --version
ruby-build 20150709
$ rbenv root
/Users/user/.rbenv

rbenvのコマンドは以下です。

$ rbenv
rbenv 0.4.0
Usage: rbenv  []

Some useful rbenv commands are:
   commands    List all available rbenv commands
   local       Set or show the local application-specific Ruby version
   global      Set or show the global Ruby version
   shell       Set or show the shell-specific Ruby version
   install     Install a Ruby version using ruby-build
   uninstall   Uninstall a specific Ruby version
   rehash      Rehash rbenv shims (run this after installing executables)
   version     Show the current Ruby version and its origin
   versions    List all Ruby versions available to rbenv
   which       Display the full path to an executable
   whence      List all Ruby versions that contain the given executable

See `rbenv help ' for information on a specific command.
For full documentation, see: https://github.com/sstephenson/rbenv#readme

それではRubyをインストールして使ってみましょう。基本的な使い方は「rbenv install -l」で特定のバージョンを探して、「rbenv install」からの「rbenv rehash」でインストールし、そして、システム全体で使用する場合は「rbenv global」、現在のシェルだけで使用する場合は「rbenv shell」、特定のフォルダで使用する場合は「rbenv local」を実行してRubyを切り替える、という感じです。

$ rbenv install -l
$ rbenv install 2.2.2
$ rbenv rehash
$ rbenv versions
* system (set by /Users/user/.rbenv/version)
  2.2.2
$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12]
$ rbenv global 2.2.2
$ rbenv version
2.2.2 (set by RBENV_VERSION environment variable)
$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]
$ rbenv install 2.1.6
$ rbenv rehash
$ rbenv versions
  system
  2.1.6
* 2.2.2 (set by /Users/user/.rbenv/version)
$ rbenv install 2.3.0-dev
$ rbenv versions
  system
  2.1.6
* 2.2.2 (set by /Users/user/.rbenv/version)
  2.3.0-dev
$ rbenv uninstall -f 2.3.0-dev
$ rbenv rehash
$ rbenv versions
  system
  2.1.6
* 2.2.2 (set by RBENV_VERSION environment variable)

おまけですが、Rubyを使用する場合、gemを使用することが多いと思いますが、このままだとgemでパッケージをインストールするたびに「rbenv rehash」する必要があります。このrehashを不要にするには「rbenv-gem-rehash」をインストールすればOKです。

$ brew install rbenv-gem-rehash

実は、rbenv-gem-rehashはココの議論により、rbenvのmasterにマージされていますが、現在homebrewでインストールできるバージョン(rbenv 0.4.0 released this on 5 Jan 2013)にはマージされていないという状況です。まあ、入れておけばよいでしょう。gitで取得しても良いですけどね。

2. pyenvによるPythonのバージョン管理方法

Pythonを複数バージョン管理するには「pyenv」を使用します。ここで、名前に注目すると「〜env」となっていますが、これは「rbenvにインスパイアーされちゃってます=rbenvと使い方ほぼ同じです」という意味です。これを二郎にちなんで、rbenvインスパイアー系と勝手に言っています。パクリと言ってはダメです、あくまでインスパイアーです(笑)

それではインストールしてみましょう。今回はvirtualenvのプラグインとセットになっている「pyenv-virtualenv」をインストールします。もちろん、pyenv単独でもインストールできます。これもhomebrewからインストールして、パスを.bash_profileに設定します。

$ brew install pyenv-virtualenv
$ vi ~/.bash_profile
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
$ source ~/.bash_profile
$ pyenv -v
pyenv 20150901

pyenvのコマンドは以下です。

$ pyenv
pyenv 20150901
Usage: pyenv  []

Some useful pyenv commands are:
   commands    List all available pyenv commands
   local       Set or show the local application-specific Python version
   global      Set or show the global Python version
   shell       Set or show the shell-specific Python version
   install     Install a Python version using python-build
   uninstall   Uninstall a specific Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   version     Show the current Python version and its origin
   versions    List all Python versions available to pyenv
   which       Display the full path to an executable
   whence      List all Python versions that contain the given executable

See `pyenv help ' for information on a specific command.
For full documentation, see: https://github.com/yyuu/pyenv#readme

使ってみましょう。

$ pyenv version
system (set by /Users/user/.pyenv/version)
$ pyenv versions
* system (set by /Users/user/.pyenv/version)
$ pyenv install -l
$ pyenv install 3.4.3
$ pyenv rehash
$ pyenv install 3.5.0rc2
$ pyenv rehash
$ pyenv versions
* system (set by /Users/user/.pyenv/version)
  3.4.3
  3.5.0rc2
$ pyenv global 3.5.0rc2
$ python --version
Python 3.5.0rc2
$ pyenv version
3.5.0rc2 (set by /Users/user/.pyenv/version)
$ pyenv versions
  system
  3.4.3
* 3.5.0rc2 (set by /Users/user/.pyenv/version)

せっかくなので、一緒に入れたPython仮想環境を作れるvirtualenvも使ってみましょう。使い方は「pyenv virtualenv」で仮想環境を作り、アプリケーションのプロジェクトフォルダに対して「pyenv local」で割り当てます。後は、そのフォルダに入ると仮想環境がactivateされ、フォルダから出るとdeactivateされます。

$ pyenv virtualenv 3.5.0rc2 env350
$ pyenv versions
  system
  3.4.3
* 3.5.0rc2 (set by /Users/user/.pyenv/version)
  env350
$ mkdir project
$ cd project
$ pyenv local env350
pyenv-virtualenv: activate env350
(env350) $ pyenv version
env350 (set by /Users/user/project/.python-version)
(env350) $ pyenv versions
  system
  3.4.3
  3.5.0rc2
* env350 (set by /Users/user/project/.python-version)
(env350) $ python --version
Python 3.5.0rc2
$ ls -a
./               ../              .python-version
$ cat .python-version 
env350
$ cd ..
pyenv-virtualenv: deactivate env350

使いやすいですね。

また、pyenvをインストールした場合、homebrewでウザいwarningが出てしまいます。以下のalias設定をすることで回避できます。(参考)

$ vi ~/.bashrc
alias brew="env PATH=${PATH///Users/${USER}/.pyenv/shims:/} brew"
$ source ~/.bash_profile

3. jenvによるJavaのバージョン管理方法

Javaを複数バージョン管理するには「jenv」を使用します。もちろん、rbenvインスパイアー系ですね。

インストールしてみましょう。これもhomebrewからインストールして、パスを.bash_profileに設定します。

$ brew install jenv
$ vi ~/.bash_profile
if which jenv > /dev/null; then eval "$(jenv init -)"; fi
$ source ~/.bash_profile
$ jenv --version
jenv 0.4.3
$ jenv root
/Users/user/.jenv

jenvのコマンドは以下です。

$ jenv
jenv 0.4.3
Usage: jenv  []

Some useful jenv commands are:
   commands    List all available jenv commands
   local       Set or show the local application-specific Java version
   global      Set or show the global Java version
   shell       Set or show the shell-specific Java version
   rehash      Rehash jenv shims (run this after installing executables)
   version     Show the current Java version and its origin
   versions    List all Java versions available to jenv
   which       Display the full path to an executable
   whence      List all Java versions that contain the given executable

See `jenv help ' for information on a specific command.
For full documentation, see: https://github.com/hikage/jenv#readme

コマンドを見て気づいたと思いますが、今までのrbenvインスパイアー系と違い、Javaのインストールは残念ながらできません。「jenv add」でインストール先を指定することで、インストールされているJavaを切り替えられる程度です。では、使ってみましょう。

$ ls /System/Library/Java/JavaVirtualMachines
ls: /System/Library/Java/JavaVirtualMachines: No such file or directory
$ ls /Library/Java/JavaVirtualMachines
jdk1.7.0_75.jdk/ jdk1.8.0_31.jdk/
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
oracle64-1.7.0.75 added
1.7.0.75 added
1.7 added
$ jenv rehash
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home
oracle64-1.8.0.31 added
1.8.0.31 added
1.8 added
$ jenv rehash
$ jenv versions
* system (set by /Users/user/.jenv/version)
  1.7
  1.7.0.75
  1.8
  1.8.0.31
  oracle64-1.7.0.75
  oracle64-1.8.0.31
$ jenv version
system (set by /Users/user/.jenv/version)
$ java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
$ jenv global 1.7
$ jenv version
1.7 (set by /Users/user/.jenv/version)
$ java -version
java version "1.7.0_75"
Java(TM) SE Runtime Environment (build 1.7.0_75-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode)
$ jenv versions
  system
* 1.7 (set by /Users/user/.jenv/version)
  1.7.0.75
  1.8
  1.8.0.31
  oracle64-1.7.0.75
  oracle64-1.8.0.31
$ jenv global 1.8
$ jenv version
1.8 (set by /Users/user/.jenv/version)
$ java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
$ jenv versions
  system
  1.7
  1.7.0.75
* 1.8 (set by /Users/user/.jenv/version)
  1.8.0.31
  oracle64-1.7.0.75
  oracle64-1.8.0.31

おっと、「/System/Library/Java/JavaVirtualMachines」が無かったのはMountain LionからYosemiteにアップグレードした時にJava6が使えなくなってしまったからです。最新のMacを使っている人はJava8があると思います。

4. nodebrewによるNodeのバージョン管理方法

Nodeを複数バージョン管理するには「nodebrew」を使用します。ここでも名前に注目すると「〜brew」になっていますね。はい、homebrewインスパイアー系と勝手に言うことにしましょう。

インストールしてみましょう。今まで通り、homebrewからインストールして、パスを.bash_profileに設定します。

$ brew install nodebrew
$ vi ~/.bash_profile
export PATH=$HOME/.nodebrew/current/bin:$PATH
$ source ~/.bash_profile 
$ nodebrew
nodebrew 0.8.1

nodebrewのコマンドは以下です。

$ nodebrew
nodebrew 0.8.1

Usage:
    nodebrew help                         Show this message
    nodebrew install             Download and install a  (compile from source)
    nodebrew install-binary      Download and install a  (binary file)
    nodebrew uninstall           Uninstall a version
    nodebrew use                 Use 
    nodebrew list                         List installed versions
    nodebrew ls                           Alias for `list`
    nodebrew ls-remote                    List remote versions
    nodebrew ls-all                       List remote and installed versions
    nodebrew alias          Set alias to version
    nodebrew unalias                 Remove alias
    nodebrew clean  | all        Remove source file
    nodebrew selfupdate                   Update nodebrew
    nodebrew migrate-package     Install global NPM packages contained in  to current version
    nodebrew exec  --   Execute  specified 

Example:
    # install from binary
    nodebrew install-binary v0.10.22

    # use a specific version number
    nodebrew use v0.10.22

    # io.js
    nodebrew install-binary io@v1.0.0
    nodebrew use io@v1.0.0

では、使ってみましょう。

$ nodebrew ls-remote
$ nodebrew install-binary latest
$ nodebrew ls
v0.12.7

current: none
$ nodebrew use v0.12.7
use v0.12.7
$ nodebrew ls
v0.12.7

current: v0.12.7
$ node -v
v0.12.7
$ nodebrew install-binary io@v3.3.0
$ nodebrew ls
v0.12.7
io@v3.3.0

current: v0.12.7
$ nodebrew use io@v3.3.0
use io@v3.3.0
$ nodebrew ls
v0.12.7
io@v3.3.0

current: io@v3.3.0
$ node -v
v3.3.0
$ iojs -v
v3.3.0
$ nodebrew use v0.12.7
use v0.12.7

こんな感じでnodeもiojsも両方扱えます。

ちなみに、環境依存だとは思いますが、今回実行した時に「nodebrew install-binary latest」でcurl失敗のエラーが出ました。原因はなぜか「~/.nodebrew/src」のフォルダが存在しなかったからです。もし同じ事象になったら「mkdir ~/.nodebrew/src」すれば解決します。

5. perlbrewによるPerlのバージョン管理方法

Perlを複数バージョン管理するには「perlbrew」を使用します。homebrewインスパイアー系です。そろそろラーメンが食べたくなってきました(笑)

perlbrewは残念ながらhomebrewのパッケージにないので、curlでインストールしましょう。パスは.bash_profileに設定します。ついでに、関連パッケージ「install-patchperl」と「install-cpanm」も入れておきましょう。

$ curl -kL http://install.perlbrew.pl | bash
perlbrew is installed: ~/perl5/perlbrew/bin/perlbrew
$ vi ~/.bash_profile 
source ~/perl5/perlbrew/etc/bashrc
$ source ~/.bash_profile 
$ perlbrew --version
/Users/user/perl5/perlbrew/bin/perlbrew  - App::perlbrew/0.73
$ perlbrew install-patchperl
patchperl is installed to
    /Users/user/perl5/perlbrew/bin/patchperl
$ perlbrew install-cpanm
cpanm is installed to
    /Users/user/perl5/perlbrew/bin/capping

perlbrewのコマンドは以下です。

$ perlbrew
Usage:
    perlbrew command syntax:

        perlbrew  [options] [arguments]

    Commands:

        init           Initialize perlbrew environment.
        info           Show useful information about the perlbrew installation

        install        Install perl
        uninstall      Uninstall the given installation
        available      List perls available to install
        lib            Manage local::lib directories.
        alias          Give perl installations a new name
        upgrade-perl   Upgrade the current perl

        list           List perl installations
        use            Use the specified perl in current shell
        off            Turn off perlbrew in current shell
        switch         Permanently use the specified perl as default
        switch-off     Permanently turn off perlbrew (revert to system perl)
        exec           exec programs with specified perl enviroments.

        self-install       Install perlbrew itself under PERLBREW_ROOT/bin
        self-upgrade       Upgrade perlbrew itself.

        install-patchperl  Install patchperl
        install-cpanm      Install cpanm, a friendly companion.
        install-multiple   Install multiple versions and flavors of perl

        download       Download the specified perl distribution tarball.
        mirror         Pick a preferred mirror site
        clean          Purge tarballs and build directories
        version        Display version
        help           Read more detailed instructions

    Generic command options:

        -q --quiet     Be quiet on informative output message.
        -v --verbose   Tell me more about it.

    See `perlbrew help` for the full documentation of perlbrew, or

    See `perlbrew help ` for detail description of the command.

perlbrewでは「perlbrew upgrade-perl」でマイナーアップデートができるので、フォルダのバージョンと中身が異ならないように「–as perl-5.XX」として、インストールするのが分かり易いです。ではでは、使ってみましょう。

$ perlbrew available
$ perlbrew install --notest perl-5.22.0 --as perl-5.22
perl-5.22 is successfully installed.
$ perlbrew install --notest perl-5.20.2 --as perl-5.20
perl-5.20 is successfully installed.
$ perlbrew list
  perl-5.20 (5.20.2)
  perl-5.22 (5.22.0)
$ perlbrew switch perl-5.22
$ perlbrew list
  perl-5.20 (5.20.2)
* perl-5.22 (5.22.0)
$ perl -v
This is perl 5, version 22, subversion 0 (v5.22.0) built for darwin-2level
$ which perl
/Users/user/perl5/perlbrew/perls/perl-5.22/bin/perl
$ perlbrew upgrade-perl
This perlbrew environment (perl-5.22) is already up-to-date.

おまけですが、perlbrewには「lib」という仕組みがあり、パッケージをlibごとに分けて管理できます。

「perlbrew lib」のコマンドは以下です。

$ perlbrew lib

Usage: perlbrew lib  

    perlbrew lib list
    perlbrew lib create 
    perlbrew lib delete 

The `lib` command is used to manipulate local::lib roots inside perl
installations. Effectively it is similar to `perl
-Mlocal::lib=/path/to/lib-name`, but a little bit more than just that.

A lib name can be a short name, containing alphanumeric, like 'awesome',
or a full name, prefixed by a perl installation name and a '@' sign, for
example, 'perl-5.14.2@awesome'.

Here are some a brief examples to invoke the `lib` command:

    # Create lib perl-5.12.3@shizuka
    perlbrew lib create perl-5.12.3@shizuka

    # Create lib perl-5.14.2@nobita and perl-5.14.2@shizuka
    perlbrew use perl-5.14.2
    perlbrew lib create nobita
    perlbrew lib create shizuka

    # See the list of use/switch targets
    perlbrew list

    # Activate a lib in current shell
    perlbrew use perl-5.12.3@shizuka
    perlbrew use perl-5.14.2@nobita
    perlbrew use perl-5.14.2@shizuka

    # Activate a lib as default
    perlbrew switch perl-5.12.3@shizuka
    perlbrew switch perl-5.14.2@nobita
    perlbrew switch perl-5.14.2@shizuka

    # Delete lib perl-5.14.2@nobita and perl-5.14.2@shizuka
    perlbrew use perl-5.14.2
    perlbrew lib delete nobita
    perlbrew lib delete shizuka

    # Delete lib perl-5.12.3@shizuka
    perlbrew lib delete perl-5.12.3@shizuka

Short lib names are local to current perl. A lib name 'nobita' can refer
to 'perl-5.12.3@nobita' or 'perl-5.14.2@nobita', depending on your
current perl.

When "use"ing or "switch"ing to a lib, always provide the long name. A
simple rule: the argument to "use" or "switch" command should appear in
the output of "perlbrew list".

最後に「perlbrew lib」を使ってみましょう。

$ perlbrew use perl-5.20
$ perlbrew lib create lib520
lib 'perl-5.20@lib520' is created.
$ perlbrew use perl-5.22
$ perlbrew lib create lib522
lib 'perl-5.22@lib522' is created.
$ perlbrew lib create perl-5.22@lib522-test
lib 'perl-5.22@lib522-test' is created.
$ perlbrew lib list
  perl-5.20@lib520
  perl-5.22@lib522
  perl-5.22@lib522-test
$ perlbrew list
  perl-5.20 (5.20.2)
  perl-5.20@lib520
* perl-5.22 (5.22.0)
  perl-5.22@lib522
  perl-5.22@lib522-test
$ perlbrew switch perl-5.22@lib522
$ perlbrew list
  perl-5.20 (5.20.2)
  perl-5.20@lib520
  perl-5.22 (5.22.0)
* perl-5.22@lib522
  perl-5.22@lib522-test
$ perlbrew lib list
  perl-5.20@lib520
* perl-5.22@lib522
  perl-5.22@lib522-test
$ perlbrew lib delete lib522-test
lib 'perl-5.22@lib522-test' is deleted.
$ perlbrew lib list
  perl-5.20@lib520
* perl-5.22@lib522
$ perlbrew lib delete perl-5.20@lib520
lib 'perl-5.20@lib520' is deleted.
$ perlbrew lib list
* perl-5.22@lib522
$ perlbrew list
  perl-5.20 (5.20.2)
  perl-5.22 (5.22.0)
* perl-5.22@lib522
$ perl -v
This is perl 5, version 22, subversion 0 (v5.22.0) built for darwin-2level

 

以上で5つの説明終了です。おつかれ!

 

<環境>
OS : OS X Yosemite 10.10.5
homebrew : 0.9.5
curl : 7.43.0

カテゴリ : 技術 Tips & Tutorials タグ : jenv, mac, nodebrew, perlbrew, pyenv, rbenv, tips, tumblr-imported

ブログ更新情報や海外の関連情報などを配信する無料メルマガ

Sponsored Links

About Author

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。

https://casualdevelopers.com/

最近の投稿

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    2019年10月30日
  • BashからZshに移行する方法(Mac編)

    BashからZshに移行する方法(Mac編)

    2019年10月21日
  • Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    2019年9月30日

カテゴリ

  • 技術 Tips & Tutorials (100)
  • 技術塾 (6)
  • ライフハック (26)
  • 海外留学 (12)
  • 英語学習 (3)
  • コラム (6)

アーカイブ

最高の学習のために

人気記事ランキング

  • MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
    MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
  • Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
    Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
  • SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
    SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
  • 爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
    爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
  • Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
    Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
  • [tips][perl] Perlで文字コードをいい感じに処理する方法
    [tips][perl] Perlで文字コードをいい感じに処理する方法
  • バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
    バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
  • PythonでWebスクレイピング入門(Scrapy+Selenium編)
    PythonでWebスクレイピング入門(Scrapy+Selenium編)
  • Amazon EC2インスタンスにSSHできなくなった時の対処法
    Amazon EC2インスタンスにSSHできなくなった時の対処法
  • SpringBootのProfile毎にプロパティを使い分ける3つの方法
    SpringBootのProfile毎にプロパティを使い分ける3つの方法

Bitcoin寄付 / BTC Donation

Bitcoinを寄付しよう

BTC
Select Payment Method
Personal Info

Donation Total: BTC 0.0010

このブログの運営のためにBitcoinでの寄付を募集しています。お気持ち程度の寄付を頂けると管理者の励みになります。

Bitcoin寄付について知りたい方はこちらの記事へ

ビットコイン取引ならここ

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • サイトマップ
  • タグ一覧
  • プライバシーポリシー
  • お問い合わせ

Copyright © 2023 KD - Casual Developers Notes