[Python] 209 pyenv + virtualenvで仮想環境を構築する

PythonとPHPを比較すると、言語の構造としてはほぼ同じであり時間的学習コストの割りに新たに得られるものが少ないので、PHPを本格的に学ぶべきかどうか躊躇していました。

そんな折、Djangoを使えばPythonでWebアプリが開発できることを知り早速環境構築に着手しました。

ただpipによるパッケージ管理では依存関係をチェックしてもらえないため、インストールするパッケージによっては途端にPythonが不調になったりします。

これまで散々痛い目にあってきたので流石に学習し、環境が大きく変わる際は仮想環境を使うことにしました。

今回はwebappというプロジェクトの仮想環境を作成し、そこにDjangoをインストールします。

仮想環境の作り方は以下の通りです。

<Python3.9.0でwebapp仮想環境を作る場合>

cd [作成したwebappフォルダのフルパス]
pyenv virtualenv 3.9.0 webapp
pyenv local webapp
python -m pip install [必要なライブラリ]
python -m pip freeze -l > requirements.txt

<Python3.8.5でも同様の仮想環境を作る場合>

cd [作成したwebapp-3.8.5フォルダのフルパス]
pyenv virtualenv 3.8.5 webapp-3.8.5
pyenv local webapp-3.8.5
python -m pip install -r requirements.txt

[Python] 208 pyenvでtkinter8.6を使えるようにする

[macOS 10.15 Catalina]

macOSではtkinter8.5がデフォルトのようなので別途設定しました。

1. tcl-tkをインストールする。

brew install tcl-tk

2. tcl-tkのバージョンが8.6であることを確認する。

brew info tcl-tk

brew(醸造)だからbottledされたパッケージはcellar(貯蔵庫)に保管とはしゃれてますね。

tcl-tk: stable 8.6.10 (bottled) [keg-only]
Tool Command Language
https://www.tcl-lang.org
/usr/local/Cellar/tcl-tk/8.6.10 (3,036 files, 51MB)

3. bash_profileに以下を追記する。

export PATH="/usr/local/opt/tcl-tk/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/tcl-tk/lib"
export CPPFLAGS="-I/usr/local/opt/tcl-tk/include"
export PKG_CONFIG_PATH="/usr/local/opt/tcl-tk/lib/pkgconfig"

4. pyenvにPython3.9.0を上書きインストールする。

PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'" pyenv install 3.9.0

私の場合はPyInstallerにも対応しなければならず、オプションを一つ追加します。

PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6' --enable-shared" pyenv install 3.9.0

5. 確認のためtkinterを起動する。

python -m tkinter

[Python] 207 PyInstallerのインストールに関するトラブル

[macOS 10.15 Catalina]

色々トラブったので備忘のためにメモ書きしておきます。

ちなみにPythonはpyenvで複数バージョンを管理しています。

PyInstallerのインストール

python -m pip install PyInstaller

うまくいかない場合はpyenvのPythonをoption付きで上書きインストール。

PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.9.0

以下コマンドでexeファイル作成。–onefileで一つの実行ファイルにまとめます。–noconsoleでコンソールなしの実行ファイルも作成します。pyinstallerではなく大文字入りのPyInstallerなのでご注意下さい。

python -m PyInstaller json_csv.py --onefile --noconsole

実はPython3.9.0の上書きインストールによりtkinterが8.6から8.5にダウングレードされてGUIのボタンの色がおかしくなるなどの不具合が発生しました。

以前pyenvでtkinter8.6が使えないためoption付きでPython3.9.0をインストールしたことをすっかり忘れていたのです。

これについては別記事に書きます。