Macでプログラミングをするための初期設定(pyenv + poetry + VSCode)【2023/10/24更新】

自分用にM2チップmac miniを購入していろいろセッティングしたので覚え書きです。

XCodeをインストールする

せっかくMacなのでiOSアプリ作ってみたいですよね。

それ以外でもアプリケーションのインストールにXCodeが必要な場合があるようです。

App Storeからインストールできます。重たいのでかなり時間がかかります。

Homebrewをインストールする

Macでいろいろインストールしようと思うと入れておく必要があります。

Page not found · GitHub Pages

ターミナルで

/bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"

を実行するだけですが、わたしの場合これだけだとパスが通っていませんでした。

M2チップだとデフォルトで/opt/homebrew/bin/brewにインストールされるみたいですね。

インストール実行後に

==> Next steps:
Run these three commands in your terminal to add Homebrew to your PATH: echo '# Set PATH, MANPATH, etc., for Homebrew.' >> /Users/〇〇〇/.zprofile echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/〇〇〇/.zprofile eval "$(/opt/homebrew/bin/brew shellenv)"

が表示されるのでその通りに実行してパスを通す必要があります。〇〇〇のところはユーザー名を入れてください。

参考:https://zenn.dev/watakarinto/articles/16451707aa08d1

pyenvのインストール

Pythonのバージョンを管理するためにpyenvを入れます。

$ brew install pyenv

homebrew便利ですね〜

パスを通します

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile

$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile

$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

pyenvの使い方

インストールできるpythonのバージョンのリストを確認する

$ pyenv install --list

バージョンを指定してpythonをインストール

$ pyenv install [バージョン]

インストール済みのpythonのバージョンをシステム全体に適用

$ pyenv global [バージョン]

システム全体で適用されているPythonバージョンを確認

$ pyenv global

インストール済みのpythonのバージョンを特定のディレクトリに適用

$ pyenv local [バージョン]

特定のディレクトリで適用されているPythonバージョンを確認

$ pyenv local

参考:https://qiita.com/koooooo/items/b21d87ffe2b56d0c589b

poetryのインストール

ライブラリの管理のためにpoetyを入れます。

こちら↓を参考にしました。

環境構築(pyenv/poetry) :: Jun Nishii
Nishii's Notebook

言われた通りに

$ curl -sSL [<https://install.python-poetry.org>](<https://install.python-poetry.org/>) | python3 -

を実行しましたが、

Exception: This build of python cannot create venvs without using symlinks

というエラーが出てしまいました…

stackoverflowを参考にして、

Attention Required! | Cloudflare
$ brew poetry

でインストールできました。

poetryの使い方

新たにプロジェクトを作成する

$ poetry new <project-name>

↓のページを参考にしました。

Poetryをサクッと使い始めてみる - Qiita
はじめに以前、pyenvとpyenv-virtualenvの自分流使い方という記事を書きました。その終わりの部分で「pyenv-virtualenv+pipをpoetryで置き換えられるんじゃない…

Pythonパッケージの標準的なディレクトリ構成で自動的にファイルを作ってくれています。

REAME.rst … そのプロジェクトの概要を記述するファイル。GitHubだとトップページにこれを表示してくれますね。中身は空ですが、拡張子が .rstになっていて reStructuredText というマークアップ言語で書くことが期待されています。reStructuredTextはMarkdownが流行る前からPython系のドキュメントで使われていた形式ですが、Markdownの方が得意という方はこれを README.mdに変えてしまっても良いかなと思います。なお、GitHubではREADME.rstだったとしても問題なくレンダリングしてくれます。

project_abc/… project_abc/はこのパッケージのpythonソースコードを格納するディレクトリで、その元締めとして __init__.pyが作られています。ここではバージョンの定義だけがされています。

pyproject.toml … Poetryプロジェクトに関するメタデータや依存関係を記述するためのファイルです。TOMLという形式で書かれています。これに関しては後述します。

pyproject.toml … Poetryプロジェクトに関するメタデータや依存関係を記述するためのファイルです。TOMLという形式で書かれています。これに関しては後述します。

tests/ … tests/はユニットテストを格納するディレクトリで、__init__.pyとバージョン番号を確認する簡単なテストが test_project_abc.pyに書かれています。

https://qiita.com/ksato9700/items/b893cf1db83605898d8a

対話的にプロジェクトを始めたい場合はpoetry initします。このコマンドはpyproject.tomlを対話的に作成することができます。

$ poetry init
This command will guide you through creating your pyproject.toml config.

Package name [username]:             
Version [0.1.0]:  
Description []:  
Author [None, n to skip]:
License []:  
Compatible Python versions [^3.11]:  

Would you like to define your main dependencies interactively? (yes/no) [yes] 
You can specify a package in the following forms:
  - A single name (requests): this will search for matches on PyPI
  - A name and a constraint (requests@^2.23.0)
  - A git url (git+https://github.com/python-poetry/poetry.git)
  - A git url with a revision (git+https://github.com/python-poetry/poetry.git#develop)
  - A file path (../my-package/my-package.whl)
  - A directory (../my-package/)
  - A url (https://example.com/packages/my-package-0.1.0.tar.gz)

Package to add or search for (leave blank to skip): 

Would you like to define your development dependencies interactively? (yes/no) [yes] 
Package to add or search for (leave blank to skip): 

Generated file

[tool.poetry]
name = "username"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.11"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"


Do you confirm generation? (yes/no) [yes]

プロジェクト直下に仮想環境を作成する設定

先ほど作成したプロジェクトのディレクトリの中で次のコマンドを実行します。

$ poetry config virtualenvs.in-project true

↓のページを参考にしました。

Poetryが作成した仮想環境をVSCodeに認識させる方法

確認

$ poetry config --list

実行すると、次のような設定が表示されてます。

cache-dir = “/home/〇〇〇/.cache/△△△” virtualenvs.create = true

virtualenvs.in-project = true virtualenvs.path = “{cache-dir}/virtualenvs”


virtualenvs.in-project = true

になっていることを確認します。

ライブラリのインストール

プロジェクトにお好きなライブラリを追加してください。

$ poetry add <package-name>

追加されたライブラリを確認するには次のコマンドを使います。

$ poetry show

はじめてpoetry addを実行すると、プロジェクトの中に「poetry.lock」ファイルができます。ここに追加したいライブラリの情報や依存関係が記載されます。「pyproject.toml」 ファイルにも新たに追加したパッケージとそのバージョンが記載されます。

poetryのpythonのバージョンを指定する

pyenvでインストールしたpythonのバージョンをpoetryに教えます。

$ poetry env use $(pyenv which python[バージョン])

これをしないと、pyproject.tomlの[tool.poetry.dependencies]に記載されたpythonのバージョン要件に合わせて自動的にpythonをインストールしてきてしまって、pyenvでインストールしたものとバージョンを合わせることができません。


poetryプロジェクトの中のpythonバージョンを確認するには、

$ poetry run python --version

仮想環境のインストール

poetry.lock」ファイルに記載された依存関係をもとにパッケージをインストールします。もしもpoetry.lockファイルがない場合は、pyproject.tomlファイルに記載されたライブラリをインストールします。

$ poetry install

poetry addしただけではライブラリがインストールされていないので注意が必要です。

仮想環境をアクティブにする【2023/10/24追記】

PCを再起動したりすると、poetryに登録されているはずなのに、ライブラリにアクセスできないことがあります。

poetryで構築した仮想環境をアクティブにする必要があります。

$ poetry shell

VSCodeでpoetryの環境を使う設定をする

こちら↓を参考にしました。

Poetryが作成した仮想環境をVSCodeに認識させる方法

VSCodeを開いて、先ほど作成したプロジェクトのフォルダを開きます。


.ipynbの場合は、右上から実行するカーネルを選択します。

上でプロジェクト直下に仮想環境を作成する設定にしていると、.venvが表示されるはずです。

それを選択すると上でインストールしたライブラリの入った仮想環境で実行できます。


.pyファイルの場合は、プロジェクトのディレクトリの中に入って、ターミナルから実行できます。

おわりに

パスを通すところと、poetryで作った仮想環境をVSCodeで設定するところでかなり苦労しました…Anacondaはそのへん楽だなと思いましたが、バージョン管理などを考えるとpyenv + poetryのほうがいいよ〜と会社の人におすすめされたのでこのスタイルで環境構築してみました。

あたらしいパソコンでたくさんプログラミングするぞ〜!

コメント

タイトルとURLをコピーしました