2022/08/07(日) [n年前の日記]
#1 [python][ubuntu] virtualenvでPythonの別バージョン環境を作成
Ubuntu Linux 22.04 LTS上で、Python + pygame 1.9.6 が利用できる状態にしたい。そこで、複数の Python 動作環境を作成できるらしい virtualenv を試用してみた。
ちなみに、Ubuntu 22.04 は仮想PC上で ―― Windows10 x64 21H2 + VMware Player 16.2.4 build-20089737 上で動かしてる。
一応、Ubuntu 22.04 の公式リポジトリに virtualenv (20.13.0+ds-2) というパッケージは存在するのだけど…。その版をインストールしても、何故かエラーが出て動かない。
動かないのでは意味が無いので、アンインストールしておいた。
どうやら pip3 でインストールした版ならそれらしく動くようだなと…。以下はユーザ権限でインストールする例。
アンインストールは以下。
管理者権限でインストールしなおした。
ユーザディレクトリ/.local/bin に各種コマンドがインストールされるみたいなので、~/.bashrc の最後のあたりでPATHを設定しておいた。
ちなみに、Ubuntu 22.04 は仮想PC上で ―― Windows10 x64 21H2 + VMware Player 16.2.4 build-20089737 上で動かしてる。
一応、Ubuntu 22.04 の公式リポジトリに virtualenv (20.13.0+ds-2) というパッケージは存在するのだけど…。その版をインストールしても、何故かエラーが出て動かない。
sudo apt install virtualenv
動かないのでは意味が無いので、アンインストールしておいた。
sudo apt purge virtualenv sudo apt autoremove
どうやら pip3 でインストールした版ならそれらしく動くようだなと…。以下はユーザ権限でインストールする例。
pip3 install virtualenv
$ virtualenv --version virtualenv 20.16.3 from /home/USERNAME/.local/lib/python3.10/site-packages/virtualenv/__init__.py
アンインストールは以下。
pip3 uninstall virtualenv
管理者権限でインストールしなおした。
sudo -H pip3 install virtualenv
$ virtualenv --version virtualenv 20.16.3 from /usr/local/lib/python3.10/dist-packages/virtualenv/__init__.py
ユーザディレクトリ/.local/bin に各種コマンドがインストールされるみたいなので、~/.bashrc の最後のあたりでPATHを設定しておいた。
vi ~/.bashrc
export PATH=$PATH:/home/USERNAME/.local/bin
◎ Python 2.7 の環境を作成。 :
Ubuntu 22.04 にインストールされている Python 2.7 をクローン(?)して、Python 2.7 の環境を作成してみる。
myenv27 というディレクトリを作成して、その中に環境を入れてみる。
環境を有効化。
プロンプトの最初に「(ディレクトリ名)」が表示されていたら、その環境で動いてる。Python のバージョンを確認。
環境を無効化。
myenv27 というディレクトリを作成して、その中に環境を入れてみる。
virtualenv -p python2.7 myenv27
環境を有効化。
source myenv27/bin/activate
プロンプトの最初に「(ディレクトリ名)」が表示されていたら、その環境で動いてる。Python のバージョンを確認。
(myenv27) ... $ python --version Python 2.7.18
環境を無効化。
(myenv27) ... $ deactivate
◎ Python 3.10 の環境を作成、有効化、無効化。 :
Ubuntu 22.04 にインストールされている Python 3.10.4 をクローンして Python 3.10 の環境を作成、有効化、無効化するなら以下。
$ virtualenv -p python3.10 myenv310 $ source myenv310/bin/activate (myenv310) ... $ python --version Python 3.10.4 (myenv310) ... $ deactivate
◎ システムに入ってないPythonバージョンで環境を作成。 :
virtualenv は、システムにインストール済みの Python をコピーして仮想環境を作る。システムにインストールされていないPythonバージョンを使いたい場合は、事前に別バージョンをインストールしておかないといけない。らしい。
_virtualenvで特定バージョンのPythonを指定する[Ubuntu]
_New Python Versions : “deadsnakes” team
Ubuntu 22.04 LTS の場合、Python 3.7、3.8、3.9 ならインストールできる。それより前のバージョンは用意されてない模様。
_virtualenvで特定バージョンのPythonを指定する[Ubuntu]
_New Python Versions : “deadsnakes” team
sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update
Ubuntu 22.04 LTS の場合、Python 3.7、3.8、3.9 ならインストールできる。それより前のバージョンは用意されてない模様。
sudo apt install python3.7 python3.7-dev python3.7-tk python3.7-full sudo apt install python3.8 python3.8-dev python3.8-tk python3.8-full sudo apt install python3.9 python3.9-dev python3.9-tk python3.9-full
◎ pygame 1.9.6 を Python 3.8環境上でインストール。 :
Ubuntu 22.04 は、sudo apt install python3-pygame をすると、pygame 2.1.2 がインストールされてしまう。どうにかして pygame 1.9.6 を動かしてみたい。
以下で、pygame 1.9.x をビルドするために必要なパッケージ群が紹介されていた。インストールしておく。
_python - Trying to install pygame on ubuntu which gives error - Stack Overflow
pygame 1.9.6 は Python 2.7, 3.4 - 3.8 をサポートしてるので、今回は Python 3.8環境を作成してみる。
_pygame - PyPI
Python 3.8環境を有効化。
pygame 1.9.6 を pip を使ってインストールしてみる。
これで、Ubuntu 22.04上でも、Python 3.8 + pygame 1.9.6 がインストールできた。
昨日作成した、tkinter ウインドウ内に pygame ウインドウを埋め込むスクリプトを動かしてみた。Python 2.7 ではなく Python 3.8 上で動かすので、昨日のスクリプトの import 関連のあたりを少し修正してある。 *1
_01_embed_pygamewindow.py
Ubuntu 22.04 + Python 3.8.13 + pygame 1.9.6 上でも、このスクリプトが動いてくれた。ちゃんと pygame のウインドウが埋め込まれてる。pygame 2.x.x では埋め込まれないはずなので、たしかに pygame 1.9.6 が利用できている。
ただ、これはあくまで開発用の環境で動いてるだけなので…。フツーのアプリとして、「Python 3.8 + pygame 1.9.6 + Pythonスクリプト」を呼び出せるわけではなさそうだなと…。
以下で、pygame 1.9.x をビルドするために必要なパッケージ群が紹介されていた。インストールしておく。
_python - Trying to install pygame on ubuntu which gives error - Stack Overflow
sudo apt install libfreetype6-dev libjpeg-dev libportmidi-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsdl1.2-dev libsmpeg-dev libx11-dev libavformat-dev libswscale-dev
pygame 1.9.6 は Python 2.7, 3.4 - 3.8 をサポートしてるので、今回は Python 3.8環境を作成してみる。
_pygame - PyPI
sudo apt install python3.8 python3.8-dev python3.8-tk virtualenv -p python3.8 myenv38
Python 3.8環境を有効化。
source myenv38/bin/activate
(myenv38) ... $ python -V Python 3.8.13
pygame 1.9.6 を pip を使ってインストールしてみる。
pip install pygame==1.9.6
$ pip list | grep pygame pygame 1.9.6
$ python -c "import pygame; print(pygame.version.vernum);" pygame 1.9.6 Hello from the pygame community. https://www.pygame.org/contribute.html 1.9.6
これで、Ubuntu 22.04上でも、Python 3.8 + pygame 1.9.6 がインストールできた。
昨日作成した、tkinter ウインドウ内に pygame ウインドウを埋め込むスクリプトを動かしてみた。Python 2.7 ではなく Python 3.8 上で動かすので、昨日のスクリプトの import 関連のあたりを少し修正してある。 *1
_01_embed_pygamewindow.py
Ubuntu 22.04 + Python 3.8.13 + pygame 1.9.6 上でも、このスクリプトが動いてくれた。ちゃんと pygame のウインドウが埋め込まれてる。pygame 2.x.x では埋め込まれないはずなので、たしかに pygame 1.9.6 が利用できている。
ただ、これはあくまで開発用の環境で動いてるだけなので…。フツーのアプリとして、「Python 3.8 + pygame 1.9.6 + Pythonスクリプト」を呼び出せるわけではなさそうだなと…。
◎ virtualenvwrapperを導入。 :
virtualenvwrapper をインストールすると、環境の管理や切り替えが楽になるらしい。試用してみた。
_Virtualenvwrapperの導入 - Qiita
_virtualenvでpython環境を管理する - Qiita
インストール。
各環境を入れておくディレクトリ、~/.virtualenvs を作成しておく。
virtualenvwrapper.sh の置き場所を確認。
~/.bashrc の最後に記述を追加。
使い方は以下。
_Virtualenvwrapperの導入 - Qiita
_virtualenvでpython環境を管理する - Qiita
インストール。
sudo -H pip3 install virtualenv sudo -H pip3 install virtualenvwrapper
各環境を入れておくディレクトリ、~/.virtualenvs を作成しておく。
mkdir ~/.virtualenvs
virtualenvwrapper.sh の置き場所を確認。
$ which virtualenvwrapper.sh /usr/local/bin/virtualenvwrapper.sh
~/.bashrc の最後に記述を追加。
vi ~/.bashrc
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh fi
使い方は以下。
- mkvirtualenv --python=python3.8 env38 : 環境を作成
- deactivate : 環境を無効化
- workon : 環境を一覧表示
- workon env38 : 環境を有効化
- rmvirtualenv env38 : 環境を削除
◎ 参考ページ。 :
_virtualenvで特定バージョンのPythonを指定する[Ubuntu]
_【Python】Virtualenvを使った仮想環境の構築 | Hbk project
_virtualenvでpython環境を管理する - Qiita
_Virtualenv の使い方 - Python 開発環境 - Python 入門
_【Python】Virtualenvを使った仮想環境の構築 | Hbk project
_virtualenvでpython環境を管理する - Qiita
_Virtualenv の使い方 - Python 開発環境 - Python 入門
*1: Python 2.7 は Tkinter を import するが、Python 3.x は tkinter を import しないといけない。
[ ツッコむ ]
以上、1 日分です。