この記事は3年以上前に書かれた記事で内容が古い可能性があります
オフライン環境にpyenv環境を作る(yum・pip・wget)
やりたいこと
まずは、オンラインのマシンで準備
オフラインのターゲットマシンとなるべく同じ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. >>>