とりあえずやり方から
# pythonのバージョンを指定してpy38という名前の実行環境を作成。名前は何でもよい
conda create -n py38 python=3.8
# 環境を切り替え
conda activate py38
# pipでpygameをインストール
pip install pygame
AnacondaでPythonはじめました
よく使うJavascriptに加えてもうひとつプログラミング言語を覚えたいと思い、Pythonの勉強を再開しました(昔、ちょっとやって飽きた)。
Macには標準でPythonが入っていますが,調べるとどうやら自分でインストールしたほうが良いみたいです。
Pythonの環境構築の方法はいろいろあって選択に困ります。
とりあえずGoogleのColaboratoryは便利ですね。ブラウザ上でさくっとコードを書いてその場で試せる。何もインストールする必要がないのがいいです。
https://colab.research.google.com/
とはいえ、やはりローカル開発環境があったほうがいいので、色んなライブラリやツールが使えるらしいAnacondaを公式サイトからダウンロードしてインストールしました。
M1 Macにも問題無くインストールできました。
which python
コマンドでパスを確認するとちゃんとAnacondaのpythonになっています。
pythonコマンドでREPL(対話的実行環境)を起動すると Python3.9.7、Anacondaと出ました。
(base) kimura@M1MBP2021 ~ % which python
/Users/kimura/opt/anaconda3/bin/python
(base) kimura@M1MBP2021 ~ % python
Python 3.9.7 (default, Sep 16 2021, 08:50:36)
[Clang 10.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> quit()
AnacondaにPygameが入らない
積ん読になっていたPython教本の関係で、ゲーム用のライブラリPygameをインストールしようとしました。
Anacondaがインストールされた環境ではcondaコマンドでパッケージなどの管理などを行います。
パッケージのインストールコマンドはconda install
です。
conda install pygame
と入力しましたが、PackagesNotFoundError
がでてしまいました。
(base) kimura@M1MBP2021 ~ % conda install pygame
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
PackagesNotFoundError: The following packages are not available from current channels:
- pygame
Current channels:
- https://repo.anaconda.com/pkgs/main/osx-64
- https://repo.anaconda.com/pkgs/main/noarch
- https://repo.anaconda.com/pkgs/r/osx-64
- https://repo.anaconda.com/pkgs/r/noarch
To search for alternate channels that may provide the conda package you're
looking for, navigate to
https://anaconda.org
and use the search bar at the top of the page.
調べてみるとconda install
はあらかじめ設定されたチャンネル(ライブラリの共有場所?)からダウンロードするようです。
どうやらPygameのインストールはデフォルトのチャンネルではなく、別の場所を指定する必要があるみたいです。
conda install -c cogsci pygame
というコマンドを使いました。
-c
はダウンロードするチャンネルを指定するオプションです。
するとパッケージは見つかりましたが、pythonのバージョンがサポート外だと言われてしまいました。
(base) kimura@M1MBP2021 ~ % conda install -c cogsci pygame
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: |
Found conflicts! Looking for incompatible packages.
This can take several minutes. Press CTRL-C to abort.
failed
UnsatisfiableError: The following specifications were found
to be incompatible with the existing python installation in your environment:
Specifications:
- pygame -> python[version='2.7.*|3.5.*']
Your python: python=3.9
If python is on the left-most side of the chain, that's the version you've asked for.
When python appears to the right, that indicates that the thing on the left is somehow
not available for the python version you are constrained to. Note that conda will not
change your python version to a different minor version unless you explicitly specify
that.
pygame -> python[version='2.7.|3.5.']
とあるので、Pyhonの2.7〜3.5がサポート対象とのこと。
なんか古くない?今のPythonはもう3.9なんですけど、というワケで調べました。
Pygameの公式サイト(https://www.pygame.org)は平和の鳩しか居なかったので、Github(https://github.com/pygame/pygame)へ行ってみました。しかしここでもどうもよく分かりません。
最終的にWikipediaのPygame記事が役に立ちました。
https://ja.wikipedia.org/wiki/Pygame
ここの記述(2022年3月現在)によると、
pygame 1.9.xは、Python 2.7と、Python 3.4からPython 3.7まで。
https://ja.wikipedia.org/wiki/Pygame
pygame 2は、Python 3.4からPython 3.8をサポートする。Python 2.7のサポートも当面継続。
バージョンはエラーメッセージと違いますが、とりあえずPygameにはバージョン1,xと2,xがあることが分かりました。
バージョン2.xならPython3.8でも使えるみたいです。
Anacondaでバージョンの違うPython環境を用意できる
いずれにせよPython3.9ではPygameが動かないので、旧バージョンのPythonを用意する必要があります。
こりゃインストールし直しかなぁと思ったら、なんとAnacondaはPythonの実行環境を複数作って切り替えられることが分かりました。
詳しい人には「今更かよ!」と言われそうですが、断片的な情報を頼りにやっている人間なんてそんなものです。
環境というとVirtualBoxのように通常のMac環境とは切り離されたイメージがありましたが、Anacondaの作る環境はPythonの実行に限ったものらしく、他のコマンドやアプリケーションは普通に動きます。
仮想環境と呼ばれることもあるみたいですが、実行環境と呼んだほうがしっくり来る気がします。
Anacondaの環境の管理はAnaconda-NavigatorというGUIアプリでもできますが、CUIの方が記録に残しやすいのでターミナルでやりました。
CUIで行った操作結果もGUIの方に反映されますし、逆もOKみたいです。
Anacondaの管理にはconda コマンドを使います。condaコマンドのリファレンスは以下にあります。
https://docs.conda.io/projects/conda/en/latest/commands.html
現在の実行環境を確認する conda info -e
現在、どんなPython仮想環境が作られているかをリストアップします。-eはリストを環境だけに限定するオプション。
conda info -e
(base) kimura@M1MBP2021 ~ % conda info -e
# conda environments:
#
base * /Users/kimura/opt/anaconda3
最初はデフォルトのbase環境だけが表示されます。使っている環境に"*"がつきます。
コマンドプロンプトにいつのまにか(base)とくっついていて、ずっと何だろうと思っていたのですが、Anacondaの現在の環境を表していたのですね。
Pythonの実行環境を新しく作る conda create
conda createで環境を作ります。-n は環境名を指定するオプション、Pythonのバージョンも指定します。
pythonのバージョンが分かりやすいように環境名をpy38としました。こういう付け方でいいのかな。ひとりでやってるとこういう時の相場とか暗黙の了解みたいなものが分からないんですよね。
conda create -n py38 python=3.8
confa info -e
で確認すると以下のようにpy38という環境が追加されました。
(base) kimura@M1MBP2021 ~ % conda info -e
# conda environments:
#
base * /Users/kimura/opt/anaconda3
py38 /Users/kimura/opt/anaconda3/envs/py38
あとから環境の名前を変えられるのかなと思って調べたら、conda自体にはrename機能はないみたいです。
代わりにクローンしてオリジナルを削除する方法が見つかりました。
conda create -n NEW_NAME --clone PREVIOUS_NAME
conda remove -n PREVIOUS_NAME --all
実行環境を切り替える conda activate (deactivate)
環境を切り替えるにはconda activateを使います。
conda activate py38
(base) kimura@M1MBP2021 ~ % conda activate py38
(py38) kimura@M1MBP2021 ~ %
プロンプトの先頭が(base)から(py38)に変わりました。
環境をbaseに戻すには conda deactivateを使います。
conda deactivate
(py38) kimura@M1MBP2021 ~ % conda deactivate
(base) kimura@M1MBP2021 ~ %
プロンプトも(base)に戻りました。
baseの状態でconda deactivateを使うと、Anaconda環境から抜け出してMacのpython環境に入るみたいです。
以下のようにdeactivateすると(base)の表記が消え、whichで得られるpythonのパスも変わります。
(base) kimura@M1MBP2021 ~ % which python
/Users/kimura/opt/anaconda3/bin/python
(base) kimura@M1MBP2021 ~ % conda deactivate
kimura@M1MBP2021 ~ % which python
/usr/bin/python
環境を削除する
要らなくなった環境はconda remove
で削除できます。
conda remove -n py38 --all
今の環境にインストールされているライブラリを一覧する
conda list でライブラリの一覧が見られます。
conda list
(py38) kimura@M1MBP2021 ~ % conda list
# packages in environment at /Users/kimura/opt/anaconda3/envs/py38:
#
# Name Version Build Channel
ca-certificates 2022.2.1 hecd8cb5_0
certifi 2021.10.8 py38hecd8cb5_2
libcxx 12.0.0 h2f01273_0
libffi 3.3 hb1e8313_2
ncurses 6.3 hca72f7f_2
openssl 1.1.1m hca72f7f_0
pip 21.2.4 py38hecd8cb5_0
python 3.8.12 h88f2d9e_0
readline 8.1.2 hca72f7f_1
setuptools 58.0.4 py38hecd8cb5_0
sqlite 3.37.2 h707629a_0
tk 8.6.11 h7bc2e8c_0
wheel 0.37.1 pyhd3eb1b0_0
xz 5.2.5 h1de35cc_0
zlib 1.2.11 h4dc903c_4
Anacondaで作ったPython3.8環境にPygame2をインストールする
いよいよPygameをインストールします。
しかし、conda install -c cogsci pygame
でインストールしてもやはりエラーになってしまいました。
どうやらconda installはpygame1をインストールしようとするみたいです。
調べてみると、代わりに通常のpython環境と同様にpipコマンドを使うとよいことが分かりました。
pip install pygame
でいいみたいです。
その前に pip install --upgrade pip
でpip自身を更新したほうがいいかも。
Anaconda環境だからといって別にcondaコマンドしか使えないわけではないようです。
pip install pygame
(py38) kimura@M1MBP2021 ~ % pip install pygame
Collecting pygame
Using cached pygame-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl (8.9 MB)
Installing collected packages: pygame
Successfully installed pygame-2.1.2
無事にPygame2がインストールできました!
サンプルゲームも動きました。
python -m pygame.examples.aliens
別途、python3.5の環境を作ってconda installでpygame1をインストールしてみました。上記のサンプルゲームはこの環境だと自機が武器を打ったときにアプリが落ちてしまいました。
パッケージのアンインストール
パッケージのアンインストールはconda uninstallとpip uninstallがあります。
conda uninstall pygame
とやるとPackagesNotFoundError
が出てしまいました。
pipでインストールしたものはpipでしかアンインストールできないようです。
pip uninstall pygame
(test) kimura@M1MBP2021 ~ % pip uninstall pygame
Found existing installation: pygame 2.1.2
Uninstalling pygame-2.1.2:
Would remove:
/Users/kimura/opt/anaconda3/envs/test/include/python3.8/pygame/_camera.h
/Users/kimura/opt/anaconda3/envs/test/include/python3.8/pygame/_pygame.h
/Users/kimura/opt/anaconda3/envs/test/include/python3.8/pygame/_surface.h
/Users/kimura/opt/anaconda3/envs/test/include/python3.8/pygame/camera.h
(中略)
/Users/kimura/opt/anaconda3/envs/test/include/python3.8/pygame/pygame.h
/Users/kimura/opt/anaconda3/envs/test/include/python3.8/pygame/scrap.h
/Users/kimura/opt/anaconda3/envs/test/include/python3.8/pygame/surface.h
/Users/kimura/opt/anaconda3/envs/test/lib/python3.8/site-packages/pygame-2.1.2.dist-info/*
/Users/kimura/opt/anaconda3/envs/test/lib/python3.8/site-packages/pygame/*
Proceed (Y/n)? y
Successfully uninstalled pygame-2.1.2
ライブラリや本体の更新
## 更新
conda update conda
conda update --all
conda update [library名]
pip install --upgrade pip
pip install --upgrade [library名]
もしくは
python3 -m pip install --upgrade pip
まとめ:python3.8環境を作ってpygame2をインストールする手順
まとめると3行の作業なんですが、ここにたどり着く過程というのも個人の記録としては大事だったりします。
# py38という名前の環境を作成
conda create -n py38 python=3.8
# 環境を切り替え
conda activate py38
# pygameをインストール
pip install pygame
いろいろ試行錯誤したおかげで、Anaconda環境というものがちょっと分かってきました。