Repo consists of personal notes of using different python version management systems.
Tool | Command |
---|---|
pdm | mkdir my-project && cd my-project && pdm init |
hatch | hatch new my-project |
poetry | poetry new my-project |
Pdm
pdm add requests # add requests pdm add requests==2.25.1 # add requests with version constraint pdm add requests[socks] # add requests with extra dependency pdm add "flask>=1.0" flask-sqlalchemy # add multiple dependencies with different specifiers # Local dependencies pdm add ./sub-package pdm add ./first-1.0.0-py2.py3-none-any.whl
pdm add -dG test pytest
- This will create the following
[tool.pdm.dev-dependencies] test = ["pytest"]
- You can specify more
[tool.pdm.dev-dependencies] lint = [ "flake8", "black" ] test = ["pytest", "pytest-cov"] doc = ["mkdocs"]
pdm update # specific pdm update requests # comma-separated list pdm update -G "security,http" # Update all default + dev-dependencies pdm update -d # Update a package in the specified group of dev-dependencies pdm update -dG test pytest
# Remove requests from the default dependencies pdm remove requests # Remove h11 from the 'web' group of optional-dependencies pdm remove -G web h11 # Remove pytest-cov from the `test` group of dev-dependencies pdm remove -dG test pytest-cov
- More info here
Hatch
Installing dependencies in `hatch` is a bit different. You have to specify the dependencies in `pyproject.toml` or in `hatch.toml` file and when you `hatch shell` or `hatch run` the dependencies will automatically install.You can select which environment to enter or run commands in by using the -e/--env
root option or by setting the HATCH_ENV
environment variable.
The run command allows for more explicit selection by prepending <ENV_NAME>
: to commands. For example, if you had the following configuration:
# pyproject.toml [tool.hatch.envs.docs] dependencies = [ "mkdocs" ] [tool.hatch.envs.docs.scripts] build = "mkdocs build --clean --strict" serve = "mkdocs serve --dev-addr localhost:8000" # hatch.toml [envs.docs] dependencies = [ "mkdocs" ] [envs.docs.scripts] build = "mkdocs build --clean --strict" serve = "mkdocs serve --dev-addr localhost:8000"
you could then serve your documentation by running:
hatch run docs:serve
- More info here
Poetry
You can simply dopoetry add requests # to install requrests
- If you specify new dependecies in
pyproject.toml
file you can dopoetry install
to install them.
[tool.poetry.dependencies] # main dependency group httpx = "*" pendulum = "*" [tool.poetry.group.test.dependencies] pytest = "^6.0.0" pytest-mock = "*"
- Optional groups can be installed in addition to the default dependencies by using the --with option of the install command.
[tool.poetry.group.docs] optional = true [tool.poetry.group.docs.dependencies] mkdocs = "*"
poetry install --with docs
- More info here
Tool | Command |
---|---|
pdm | pdm shell |
hatch | hatch shell |
poetry | poetry shell |
=== "bash/csh/zsh"
``` sh eval $(pdm venv activate for-test) ```
=== "fish"
```sh eval (pdm venv activate for-test) ```
=== "powershell"
```ps1 PS1> Invoke-Expression (pdm venv activate for-test) ```
N.B. In order to do pdm shell
you have to set the following in your shell.
- Add a shell function to activate the virtualenv, here is an example of BASH function that also works on ZSH & BASH:
pdm() { local command=$1 if [[ "$command" == "shell" ]]; then eval $(pdm venv activate) else command pdm $@ fi }
Copy and paste this function to your ~/.bashrc
or ~/.zshrc
file and restart your shell.
- For fish shell you can put the following into your
~/fish/config.fish
or in~/.config/fish/config.fish
function pdm set cmd $argv[1] if test "$cmd" = "shell" eval (pdm venv activate) else command pdm $argv end end
N.B They are not the ideal projects and I don't recommend anyone to strictly follow them. They just get the job done :)
Tool | Link |
---|---|
pdm | swarm-bee-py |
hatch | bmt-py |
poetry | Delegation |