過去記事 python211003

アプリごとに使用するモジュール構成がちがったり、同じモジュールでも指定バージョンが異なるとか往々にある.
なのでアプリごとに実行環境を用意してそのアプリを走らせるのがいいのかなと思っている。

ここでは pyenv/anaconda (もしくは pyenv/miniconda) を主に使っている

pythonアプリを開発するのではなく、pythonアプリを使うことを主眼として、そのほかの方法について

vnev

「python -m venv <環境名>」で用意します

  1
  2
  3
  4
  5
  6
  7
  8
  9
[illya@c ~]$ python3 -m venv cinderella
 
[illya@c ~]$ ls -l 
 :
drwxrwxr-x 5 illya fgo 4096 Oct  3 16:51 cinderella   <-- フォルダが作られます
 :
[illya@c ~]$ source ./cinderella/bin/activate
 
(cinderella) [illya@c ~]$

これで実行環境 cinderella に移りました.
この後に構築

(cinderella) [illya@c ~]$ pip install cinderella[cpu]

っで実行

(cinderella) [illya@c ~]$ sp_cinderella_predict.py

抜ける

(cinderella) [illya@c ~]$ deactivate
[illya@c ~]$

環境は「python3 -m venv <環境>」と実行した場所に用意される. その場に用意されるので、「python3 -m venv py3_venv_crYOLO」とかのほうがいいのかも. python3.7とかpython3.8で用意したいのならOS側とか自分の側(~/local/python3.7/とか)にpythonをインストールする必要がある.

anacondaのパッケージ管理は使えない. pipのパッケージ管理は使える.

virtualenv

yum install python36-virtualenv

virtualenvは作った実行環境で使用されるpythonのバージョンを変更できるのがいいみたい.

[illya@c ~]$ virtualenv-3 -p python3.8 crYOLO
The path python3.8 (from --python=python3.8) does not exist
 
[illya@c ~]$

...どいうやら事前にインストールが必要みたい.... pyenv/anaconda ならその辺も自動で行ってくれる.
ではどうするかになりますが、正直ソースコードから入れるのは面倒なこのご時世. 簡単にやってみる
sclを使います 参照CentOS/devtoolset

[root@c ~]# yum install centos-release-scl-rh
[root@c ~]# yum install rh-python38

これでsclによるpython38が有効になりました

[illya@c ~]$ source scl_source enable rh-python38
[illya@c ~]$ whcih python
/opt/rh/rh-python38/root/usr/bin/python
 
[illya@c ~]$ virtualenv-3 -p python3.8 crYOLO

と確認して、別のターミナルを開き

[illya@c ~]$ which python
/usr/bin/python
 
[illya@c ~]$ python -V
Python 2.7.5
 
[illya@c ~]$

っで環境に移ってみる

[illya@c ~]$ . ./crYOLO/bin/activate
(crYOLO) [illya@c ~]$ which python
~/crYOLO/bin/python
(crYOLO) [illya@c ~]$ python -V
Python 3.8.11
(crYOLO) [illya@c ~]$

と「source scl_source enable rh-python38」なしにpython3.8が使える環境になりました.

pyenv

複数のバージョンのpythonを切り替えることが来出る

[illya@c ~]$ git clone https://github.com/yyuu/pyenv.git .pyenv
[illya@c ~]$ vi .bashrc
 :
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
 
[illya@c ~]$

別のターミナルなどを開いて「.bashrc」を有効にする.

っでpyenvでOS搭載のpython以外に切り替えられるものは「pyenv install -l」で上げられる.

[illya@c ~]$ pyenv install -l
 :
  3.6.15
 :
  3.7.12
 :
  3.8.12
 :
  anaconda3-5.3.1
 :
  miniconda3-4.7.12
 :
[illya@c ~]$

とさまざまある. 試しに「3.6.15」「3.8.12」「3.9.7」「anaconda3-5.3.1」「miniconda3-4.7.12」らを入れてみる

[illya@c ~]$ pyenv install 3.6.15
[illya@c ~]$ pyenv install 3.8.12
[illya@c ~]$ pyenv install 3.9.7
[illya@c ~]$ pyenv install anaconda3-5.3.1
[illya@c ~]$ pyenv install miniconda3-4.7.12

削除は「pyenv uninstall 3.8.12」とします
っで、確認すると下記のようになる

[illya@c ~]$ pyenv versions
* system (set by /home/illya/.pyenv/version)
  3.6.15
  3.8.12
  3.9.7
  anaconda3-5.3.1
  miniconda3-4.7.12
[illya@c ~]$

っで切り替えテストをしてみる

[illya@c ~]$ pyenv versions
* system (set by /home/illya/.pyenv/version)
(略
[illya@c ~]$ which python
~/.pyenv/shims/python
[illya@c ~]$ python -V
Python 2.7.5
[illya@c ~]$ pyenv global 3.6.15
[illya@c ~]$ which python
~/.pyenv/shims/python
[illya@c ~]$ python -V
Python 3.6.15
 
[illya@c ~]$ pyenv global 3.8.12
[illya@c ~]$ which python
~/.pyenv/shims/python
[illya@c ~]$ python -V
Python 3.8.12
[illya@c ~]$

pythonへのPATHはいつも同じなのですが、切り替えてversionが違う事が分かります

特定のフォルダで特定のpythonが動くようにするには「local」を使う

[illya@c ~]$ mkdir topaz && cd topaz
[illya@c topaz]$ pyenv local 3.6.15
[illya@c topaz]$ ls -l
total 12
drwxrwxr-x  2 illya fgo 4096 Oct  6 01:23 .
drwx------ 10 illya fgo 4096 Oct  6 01:22 ..
-rw-rw-r--  1 illya fgo    7 Oct  6 01:23 .python-version
[illya@c topaz]$ cat .python-version
3.6.15
[illya@c topaz]$ python -V
Python 3.6.15
[illya@c topaz]$ which pip
~/.pyenv/shims/pip
[illya@c topaz]$ pip -V
pip 18.1 from /home/illya/.pyenv/versions/3.6.15/lib/python3.6/site-packages/pip (python 3.6)
[illya@c topaz]$ pip install topaz-em
 :
[illya@c topaz]$ which topaz
~/.pyenv/shims/topaz
[illya@c topaz]$ topaz --version
TOPAZ 0.2.4
[illya@c topaz]$

ここでtopazが実行できるのは topaz フォルダ内のみ. もし他へ移ると実行できなくなる

[illya@c topaz]$ cd ~/
[illya@c ~]$ which python
~/.pyenv/shims/python
[illya@c ~]$ python -V
Python 3.8.12
[illya@c ~]$

とpythonのバージョンが変更され、

[illya@c ~]$ which topaz
~/.pyenv/shims/topaz
[illya@c ~]$

とtopazへのPATHは通るものの実行するとエラーになります。python3.8のため. 「pyenv global 3.6.15」とすれば実行できるが、、、結構面倒くさいかな.

同一のpythonバージョンで複数のアプリを互いに影響が及ばないように区分して使うには無理かな.

anaconda

anacondaパッケージ管理を使ってpython実行環境を作る.

[illya@c ~]$ wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
[illya@c ~]$ bash ./Anaconda3-2021.05-Linux-x86_64.sh
 :
Anaconda3 will now be installed into this location:
/home/illya/anaconda3
 
  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below
 
[/home/illya/anaconda3] >>>
PREFIX=/home/illya/anaconda3
 :
installation finished.
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] >>> yes
 :
[illya@c ~]$

これで新しいターミナルを開くと今いる実行環境が常に表示されるようになる

(base) [illya@c ~]$

この方法が微妙なら「conda config --set auto_activate_base false」を実行する $HOME/.condarcの「auto_activate_base:」値が変更になる


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-10-06 (水) 02:11:37 (107d)