Skip to content

Instantly share code, notes, and snippets.

@c-bata
Last active January 31, 2018 04:12
Show Gist options
  • Save c-bata/bdabbd9fde110579b18c to your computer and use it in GitHub Desktop.
Save c-bata/bdabbd9fde110579b18c to your computer and use it in GitHub Desktop.
pymanage: Simple python interpreter manager.

HomeBrewでPythonを入れるのをやめる

HomeBrewでPython入れてたけどtoxとか使ってると、pythonの各バージョンが必要になってくるけどこれまで使ってたHomeBrewだと複数のバージョンが管理できない。pyenvは使わない機能が多すぎるしややこしいのでもっとシンプルに管理出来るツールを作った

aodag先生の管理のしかた を真似してみる。

  • /opt 以下にPythonをインストール
  • /usr/local/bin/ にシンボリックリンクをはる
  • マイナーバージョンまでの部分までのコマンドがPATHに含まれる

目的

他の定番ツールだと多分 pyenv だけど、ちょっと何してるのかよく分からない上にPyCharm使ってると必要ないなって思える機能(globalとかlocalとか)も多いので、もっとシンプルに扱える管理コマンドが欲しい。 他の理由としては、個人用途で使ってるサーバ環境にわざわざpyenv入れたくはないけど、色んなバージョンは使えるようにしておきたい。 これはシェルスクリプト1つなので、wgetして実行権限つけるだけでいい。

依存関係

yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel readline-devel tk-devel
yum install -y python-devel gcc wget
sudo apt-get install build-essential python3-dev python3-pip

一気にインストール

for v in 2.6.9 2.7.10 3.3.6 3.4.3 3.5.0
do
    sudo pymanage install $v
    sudo pymanage link $v
done

virtualenv wrapper

fork先の子プロセスでvirtualenvをactivateしてそれを親プロセスに反映させるみたいなことは出来ないから、シェル関数として登録しておいてforkせずに使う必要があるらしい。.bashrc に↓を登録した。

## workon function like virtualenv wrapper
WORKON_HOME=${WORKON_HOME:-$HOME/.virtualenvs}
workon() {
    if [ $# -ne 1 ]; then
        for env in $(ls -d ${WORKON_HOME}/*/); do
            basename ${env}
        done
    elif [ -d ${WORKON_HOME}/${1} ]; then
        source ${WORKON_HOME}/${1}/bin/activate
    fi
}
@c-bata
Copy link
Author

c-bata commented Oct 25, 2015

pyenvよくわからなかったけどとりあえず .pyenv/versions の中にinterpreterがちゃんと入ってた。

.pyenv/shims は謎ディレクトリ READMEによるとここにPATHを通している。
Through a process called rehashing, pyenv maintains shims in that directory to match every Python command across every installed version of Python—python, pip, and so on.

$ ls .pyenv/versions/
2.7.9            3.2.3            3.4.3            anaconda3-2.1.0  miniconda3-3.8.3

$ .pyenv/versions/anaconda3-2.1.0/bin/python3.4
Python 3.4.1 |Anaconda 2.1.0 (x86_64)| (default, Sep 10 2014, 17:24:09)
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
>>>

所感

  • pyenv-virtualenvの存在が一番謎。使いたくない
  • localとかglobalはややこしくて混乱するから使わない
  • メリットはanaconda入れる時になんか依存関係を上手くやってくれてるぐらい

今後

  • 出来るだけ自前でpandasとかは入れれるようにしておく。どうしてもanacnodaが使いたいなら、pyenvをpathを通さずに使うしかないかな。この時はpyenv-virtualenvとか使わない。そもそもanacondaでvirtualenvが必要なシーンがなさそう
  • その他のシーンではpymanageが便利そう
  • とりあえず個人用途のVPSで使いまくってる

@c-bata
Copy link
Author

c-bata commented Oct 25, 2015

http://blog.riywo.com/2012/08/27/235239/
補完機能つけるの結構面倒そう

zshならうまく出来るのかもしれない

@c-bata
Copy link
Author

c-bata commented Oct 25, 2015

1ヶ月ぐらい使ってみてブログで宣伝してみる

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment