概要 †別の環境で作成した pyenv 環境をまるごとコピーして別環境に配置した場合に問題なく利用できるか確認してみた。 [前提]
目次 †
pyenv環境作成 †作業用ディレクトリの作成 及び 移動 †mkdir test_pyenv_copy cd test_pyenv_copy コンテナ上に pyenv 環境を作成する †ubuntu のコンテナを作成し、pyenv 環境を作成する。 pyenvコピー用のワークを作成 mkdir work コンテナの起動 及び アタッチ docker run --rm -it -v `pwd`/work:/tmp/work ubuntu:18.04 bash 以下、コンテナ内での作業 # 必要なものをインストール # (実際は作業途中でエラーになりながら個別にインストールしたが、ここでの本題ではないので纏めた) apt-get update apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev libffi-dev liblzma-dev python-openssl gcc make git # python をソースからインストール cd /tmp/work curl https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz -o Python-3.8.1.tgz tar xzfv Python-3.8.1.tgz cd Python-3.8.1 ./configure make make install ln -s /usr/local/bin/python3 /usr/local/bin/python # pyenv インストール git clone https://github.com/pyenv/pyenv.git ~/.pyenv echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile pyenv versions * system (set by /root/.pyenv/version) # pyenv 環境に 3.8.1 をインストール pyenv install 3.8.1 pyenv versions * system 3.8.1 (set by /root/.pyenv/version) # python 3.8.1 環境に切り替え pyenv global 3.8.1 # 適当なパッケージをインストール pip install flask # 出来上がった pyenv アーカイブして、マウント済みのコピー用ワークに移動 cd ~/ tar czfv pyenv381.tgz .pyenv mv pyenv381.tgz /tmp/work/ 作成した pyenv 環境が別環境で利用できるのか確認 †動作確認用の処理を作成しておく †work/app.py from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'root!\n' @app.route('/sample') def sample(): return 'sample!\n' if __name__ == "__main__": app.run() pyenv 動作確認用のコンテナを作成し pyenv をコピーする †docker run --rm -it -v `pwd`/work:/tmp/work ubuntu:18.04 bash cd ~/ cp /tmp/work/pyenv381.tgz ./ tar xzfv pyenv381.tgz echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile echo 'export PATH="$PYENV_ROOT/shims:$PATH"' >> ~/.bash_profile source ~/.bash_profile # flask起動 cd /tmp/work/ python app.py >flask.log 2>&1 & そのままコンテナ上で動作確認 # 動作確認用に curl をインストール apt-get update apt-get -y install curl curl http://127.0.0.1:5000/ root! curl http://127.0.0.1:5000/sample sample! コピー先の環境では python のインストールすらしていないが、問題なく使用できた。 別ユーザだとダメっぽい。( .pyenv 配下のファイルに コピー元の pyenv の path情報まで含まれている模様 ) grep -r "/root/.pyenv" ~/.pyenv/ | wc -l 4987 |