yoshiislandblog.net
元営業の駆け出しアラサーSEが、休日にMACと戯れた際の殴り書きメモ。日々勉強。日々進歩。

この記事は3年以上前に書かれた記事で内容が古い可能性があります

オフライン環境にpyenv環境を作る(yum・pip・wget)

2019-04-03

やりたいこと

まずは、オンラインのマシンで準備
オフラインのターゲットマシンとなるべく同じOSで準備する
今回はVagrantで作成したCentOS6.5を使う

参考まで使ったVagrant boxは”centos6.5″

% cat Vagrantfile | egrep -v "#" | egrep -v "^$"
Vagrant.configure("2") do |config|
  config.vm.box = "centos6.5"
end
%

最終的にこのような必要モジュール集を用意して
固めてオフライン環境に持っていき、pyenv環境を構築していく

root@vagrant-centos65 mochimono# ls
pyenv  pyenvvirtualenv  python  repo  requests
root@vagrant-centos65 mochimono#

コマンドピックアップ

まず大事なコマンドをメモしておく

yumでインストールせずにダウンロードだけするコマンドと
インストールしたローカルファイルからyumインストールする

# sudo yum -y reinstall {module} --downloadonly --downloaddir=./hoge/
# sudo yum -y localinstall hoge/*

pipでインストールせずにダウンロードだけするコマンドと
インストールしたローカルファイルからpipインストールする

# pip install -d ./hoge/ {module}
# pip install ./hoge/*

オンライン環境での準備

pyenvはgit cloneで取ってくる

root@vagrant-centos65 mochimono# mkdir ./pyenv/
root@vagrant-centos65 mochimono# sudo git clone https://github.com/yyuu/pyenv.git ./pyenv/

中身はこれ

root@vagrant-centos65 mochimono# ls pyenv
CHANGELOG.md  CONDUCT.md  Makefile   bin          libexec  pyenv.d  terminal_output.png
COMMANDS.md   LICENSE     README.md  completions  plugins  src      test
root@vagrant-centos65 mochimono#

万が一これが出たら

root@vagrant-centos65 mochimono# sudo git clone https://github.com/yyuu/pyenv.git ./pyenv/
Initialized empty Git repository in /home/vagrant/mochimono/pyenv/.git/
error:  while accessing https://github.com/yyuu/pyenv.git/info/refs

fatal: HTTP request failed
root@vagrant-centos65 mochimono#

これを打っておく

root@vagrant-centos65 mochimono# yum update -y nss curl libcurl

次はpyenvvirtualenv
これもgitから持ってくる

root@vagrant-centos65 mochimono# mkdir pyenvvirtualenv/
root@vagrant-centos65 mochimono# git clone https://github.com/yyuu/pyenv-virtualenv.git ./pyenvvirtualenv/

中身はこのようになる

root@vagrant-centos65 mochimono# tree pyenvvirtualenv/
pyenvvirtualenv/
`-- pyenv-virtualenv
    |-- CHANGELOG.md
    |-- LICENSE
    |-- README.md
    |-- bin
    |   |-- pyenv-activate
    |   |-- pyenv-deactivate
    |   |-- pyenv-sh-activate
    |   |-- pyenv-sh-deactivate
    |   |-- pyenv-virtualenv
    |   |-- pyenv-virtualenv-delete
    |   |-- pyenv-virtualenv-init
    |   |-- pyenv-virtualenv-prefix
    |   `-- pyenv-virtualenvs
    |-- etc
    |   `-- pyenv.d
    |       |-- rehash
    |       |   `-- envs.bash
    |       |-- uninstall
    |       |   `-- envs.bash
    |       `-- which
    |           |-- conda.bash
    |           |-- python-config.bash
    |           `-- system-site-packages.bash
    |-- install.sh
    |-- libexec
    |   `-- pyenv-virtualenv-realpath
    |-- shims
    |   |-- activate
    |   `-- deactivate
    `-- test
        |-- activate.bats
        |-- conda-activate.bats
        |-- conda-deactivate.bats
        |-- conda-prefix.bats
        |-- conda.bats
        |-- deactivate.bats
        |-- delete.bats
        |-- envs.bats
        |-- hooks.bats
        |-- init.bats
        |-- installer.bats
        |-- pip.bats
        |-- prefix.bats
        |-- python.bats
        |-- pyvenv.bats
        |-- stubs
        |   `-- stub
        |-- test_helper.bash
        |-- tmp
        |-- version.bats
        |-- virtualenv.bats
        `-- virtualenvs.bats

12 directories, 41 files
root@vagrant-centos65 mochimono#

次はPython本体
今回はとりあえず3.6.0だけ
wgetでとってくる

root@vagrant-centos65 mochimono# mkdir python
root@vagrant-centos65 mochimono# sudo yum install wget
root@vagrant-centos65 mochimono# wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz ./python/

中身はこうなる

root@vagrant-centos65 mochimono# tree python/
python/
`-- Python-3.6.0.tar.xz

0 directories, 1 file
root@vagrant-centos65 mochimono#

次はpyenvに必要なモジュールたち
reinstallとすることで、すでにインストールされていてもダウンロードできるようになる

root@vagrant-centos65 mochimono# sudo yum install yum-plugin-downloadonly
root@vagrant-centos65 mochimono# sudo yum -y reinstall gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel --downloadonly --downloaddir=./repo/

中身はこれ

root@vagrant-centos65 mochimono# tree repo/
repo/
|-- bzip2-devel-1.0.5-7.el6_0.x86_64.rpm
|-- gcc-4.4.7-23.el6.x86_64.rpm
|-- gcc-c++-4.4.7-23.el6.x86_64.rpm
|-- git-1.7.1-9.el6_9.x86_64.rpm
|-- make-3.81-23.el6.x86_64.rpm
|-- openssl-devel-1.0.1e-57.el6.x86_64.rpm
|-- readline-devel-6.0-4.el6.x86_64.rpm
|-- sqlite-devel-3.6.20-1.el6_7.2.x86_64.rpm
`-- zlib-devel-1.2.3-29.el6.x86_64.rpm

0 directories, 9 files
root@vagrant-centos65 mochimono#

必要なモジュールも一つだけ持って行く
これはpipでインストール

root@vagrant-centos65 mochimono# mkdir ./requests
root@vagrant-centos65 mochimono# pip install -d ./requests/ requests

中身はこれ

root@vagrant-centos65 mochimono# tree requests/
requests/
|-- certifi-2019.3.9-py2.py3-none-any.whl
|-- chardet-3.0.4-py2.py3-none-any.whl
|-- idna-2.8-py2.py3-none-any.whl
|-- requests-2.21.0-py2.py3-none-any.whl
`-- urllib3-1.24.1-py2.py3-none-any.whl

0 directories, 5 files
root@vagrant-centos65 mochimono#

あとは固めて、SCPとかでオフライン環境に持って行く

root@vagrant-centos65 mochimono# cd ../
root@vagrant-centos65 vagrant# tar -zcvf mochimono.tar.gz mochimono/

参考
ファイルやりとり方法整理整頓

オフライン環境でのインストール

ここからは、オフライン環境でやる作業

持ってきたものを解凍する

root@vagrant-centos65 vagrant# tar -zxvf mochimono.tar.gz
root@vagrant-centos65 vagrant#cd mochimono
root@vagrant-centos65 mochimono#

pyenvに必要なモジュールをダウンロード

root@vagrant-centos65 mochimono]# sudo yum -y localinstall repo/*

pyenvをしかるべき場所に移動

root@vagrant-centos65 mochimono# mv pyenv .pyenv
root@vagrant-centos65 mochimono# mv .pyenv/ ~/

pyenv-virtualenvをしかるべき場所に移動

root@vagrant-centos65 mochimono# mv pyenvvirtualenv/pyenv-virtualenv/ ~/.pyenv/plugins/

パスを通す
今回はローカルのPythonソースからインストールするので
PYTHON_BUILD_CACHEにてPythonがある場所を指定しておく

root@vagrant-centos65 mochimono# vi ~/.bash_profile
root@vagrant-centos65 mochimono# cat ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

# pyenv
export PYENV_ROOT=$HOME/.pyenv
export PYTHON_BUILD_CACHE_PATH=$PYENV_ROOT/cache
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
root@vagrant-centos65 mochimono#

設定反映

root@vagrant-centos65 mochimono# source ~/.bash_profile

Pythonソースの配置
先ほど定義した場所に配置する

root@vagrant-centos65 mochimono# mkdir ~/.pyenv/cache
root@vagrant-centos65 mochimono# mv python/Python-3.6.0.tar.xz ~/.pyenv/cache/
root@vagrant-centos65 mochimono#

追加Pythonのインストール

root@vagrant-centos65 mochimono# pyenv install 3.6.0

root@vagrant-centos65 mochimono# pyenv versions
* system (set by /root/.pyenv/version)
  3.6.0
root@vagrant-centos65 mochimono# pyenv local 3.6.0

必要モジュールをインストール

root@vagrant-centos65 mochimono# pip install requests/*

これでpyenvもpyenv virtualenvも使えるようになっている!

root@vagrant-centos65 vagrant# cd mochimono
root@vagrant-centos65 mochimono# pyenv versions
  system
  3.6.0
  3.6.0/envs/test
* test (set by /home/vagrant/mochimono/.python-version)
root@vagrant-centos65 mochimono#
root@vagrant-centos65 mochimono# python
Python 3.6.0 (default, Apr  2 2019, 14:06:36)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>