最近の Python の仮想化について調べる
aqua の Python 対応に関連して、 pip で CLI ツールをインストールする際の仮想化について調べる。
Python にはいろいろな仮想化ツールがあってややこしいという印象
- pyenv https://github.com/pyenv/pyenv
- venv https://docs.python.org/ja/3/library/venv.html
- virtualenv https://virtualenv.pypa.io/en/latest/
- virtualenvwrapper - a useful set of scripts for creating and deleting virtual environments
- pew - provides a set of commands to manage multiple virtual environments
- tox - a generic virtualenv management and test automation command line tool, driven by a tox.ini configuration file
- nox - a tool that automates testing in multiple Python environments, similar to tox, driven by a noxfile.py configuration file
- rye https://github.com/astral-sh/rye
- uv https://github.com/astral-sh/uv
- poetry https://python-poetry.org/
- pipx https://github.com/pypa/pipx
--
venv に関連して
The pyvenv script has been deprecated in favour of python3 -m venv.
pyvenv は非推奨で python3 -m venv
が推奨
pip も python -m pip
が推奨なんじゃなかったかな
今は virtualenv より venv のほうが推奨なのかな
pyenv で Python のバージョン管理して venv で package 管理すればいいのかな
aqua で Python 本体のバージョンを管理する場合、 aqua は Python package のバージョンの管理まではしないので、 package のバージョン管理をするほかのツールと組み合わせることになる。
poetry は Python 自体は管理しなくて package のみなのかな。
uv は pyenv や poetry を置き換えると言っている。ということは Python と package の両方管理できるのかな
A single tool to replace pip, pip-tools, pipx, poetry, pyenv, virtualenv, and more.
rye は https://github.com/indygreg/python-build-standalone/ から Python を取得する、つまり Python 自体を管理できる。
pipx は CLI の Python package 管理ツール。
つまり aqua で Python を管理する場合、組み合わせて使うのは
- venv
- virtualenv (venv のほうが推奨?)
- poetry
- pipx
aqua で Python を管理するために PIP_TARGET を設定すると venv が動かなくなる。
正確に言うと PIP_TARGET で指定したパスにインストールされてしまう。
常に venv を使うのであれば PIP_TARGET は設定する必要はないが、
プロジェクトのツールは venv 使いつつ global には使わない、ということも考えられるので難しい。
virtualenv も同様
PIP_TARGET を指定しなくても python -m <package>
で実行できる