1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

2019, 最近のpythonの環境管理を調べ始めた

Last updated at Posted at 2019-06-28

今更pythonを使い始める

わけあってpythonを使う必要性に駆られたので、最近の環境分離系のデファクトについて調べたのでメモしておく。

前提とする環境

  • macos
  • python3.6以降

python仮想環境の概要

環境分離

pyvenvがpython3.3以降標準で使える。virtualenvを標準に取り込んだもの。
これを使うのが間違えなさそう。

ライブラリの場所を切り替えることができる。

処理系切り替え(使わない方向で)

pyenvというのがある。
python処理系のバージョンを複数管理することができる。
基本的に最新のpythonで動作させる方が良さそうなので、pyvenvで事足りるのであればあまり使わない方がいいかも。

pipenvとかどうよ(使うか悩ましい。)

pyvenv, pipでできることを、よりクールでヒップにできるようにするツール。
rubyのbundlerみたいな感じ。

  • pipenvコマンドを起点にする。
  • pyvenv, pipの雑多な操作をラップしてくれる。
  • pip freezeよりも高度なパッケージロックを提供してくれる。

pyvenv, pipでミニマルにやるのが良さそうだけど、どうなんだろう。

rubyとの比較

python ruby
パッケージリポジトリ pip gem
パッケージバージョン固定 pip bundler
環境分離 pyvenv(venv) bundler
処理系切り替え pyenv rbenv

rubyがgemとbundlerで解決していることを、pythonはpipとvenvで解決している。
ここでいう解決したいこととは、

  • パッケージの名前空間を分離する。
  • パッケージのバージョン依存を管理する。
  • パッケージのバージョンを固定する。

処理系切り替えは、あまり関わらない方が良さそうだ。
rbenvもいい思い出がない。

venv, pipを使ってみる

分離環境作成

$ python -m venv ~/dev/py1

分離環境に入る

$ . ~/dev/py1/bin/activate # "." === "source" on bash
$ pip install tensorflow

シェルスクリプトのactivateを読めばわかるけど、
~/dev/py1/binPATHの先頭に設定することで、python, pipコマンドを仮想環境のものを呼ぶようにしているだけ。

pipenvを使ってみる。

## install pipenv
$ sudo python -m pip install pipenv

$ mkdir ~/dev/pipenv1
$ cd ~/dev/pipenv1

## ref:https://docs.pipenv.org/en/latest/advanced/#configuration-with-environment-variables
## `.venv`を`~/dev/pipenv1`配下に作るよう環境変数を設定する。
$ export PIPENV_VENV_IN_PROJECT=1

## pipenv環境を初期化する。`.venv`, `Pipfile`などを生成する。
$ pipenv --python 3.7

## 試しにhylangをインストールする。Pipenv.lockを生成or更新してくれる。
$ pipenv install hy=0.17.0

## 環境配下でコマンドを実行する。rubyの`bundle exec`に相当する。
$ pipenv run pip list

## 環境に入る。
$ pipenv shell

使ってみた感じまあ良さそう。絵文字とか色制御文字が多用されているのがヒップな感じで鬱陶しいけど。
venv同様、pythonが公式に取り込むかもしれない。

pythonてユーザが多いせいか、javascriptと同じ感じでえらくヒップになってるな。

結論

pipenv使ってみるかな。Pipenv, Pipenv.lockの仕組み以外はpipvenv(virtualenv)をラップしているだけのように見えるので、
いざとなれば抜けることはできそう。

flaskでもいじってみるかな。

個人的は背景

過去にjythonやcpythonで簡単な処理を書いたり、zopeやploneでwikiを立ち上げて運用していたことはあるけど、
長らくperl, ruby (そしてcommon lisp)を使う日々が続いた。

もちろんC, SQL, javascriptはこれまでも、そしてこれからも長く付き合っていく言語である。
posix, 永続化, webブラウザというプラットフォームを握っている以上逃れることはできない。

業務でpythonを使うこともなくはなかったけど、メインはperl, ruby, cだった。

個人的にperlは、レシシカルクロージャが作れてシンタックスも簡潔だし、
弱点がない言語であると(今だに)思うものの、人気が低下してしまい、仕事の量が少ないのは個人の力ではどうしようもない。

事情があってpythonを使うことになったので、最近のpython事情について調べつつメモしていこうと思う。

pythonのインデントシンタックスは言語的な欠陥だと思うものの、まあいざとなったらhylangでしのぐかと考えている。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?