User Guide
Warning
huak
is in an experimental state.
Contents
- Getting started
- Manage your dependencies
- Support more of your workflow
- Distribute your project
- Configure Huak
Getting started
Installation
⚠️ WARNING: The PyPI distribution is outdated. Until it is updated you'll need to install
huak
from source.
cargo install --git https://github.com/cnpryer/huak.git huak
Then add "$HOME/.huak/bin" to your path.
Create a new project
To create a new project use the new
command.
~/github
❯ huak new my-project
Or initialize an existing project
~/github/existing-project
❯ huak init
huak
distinguishes between library and application-like projects. Projects default to the library type if a type isn't specified. Specify the type with either the --lib
or --app
flag.
Initializing an existing project adds a pyproject.toml
to the current directory. Bootstrapping the project with the new
command creates a Python project with the following structure:
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ tree .
.
├── pyproject.toml
├── src
│ └── my_project
│ └── __init__.py
└── tests
└── test_version.py
Note
Without --no-vcs
huak
generates a git
-initialized project.
Manage your dependencies
Add a dependency
Use huak
to add dependencies to your Python project.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak add xlcsv
Installer Options
Currently huak
uses pip
under the hood for package installation. You can pass additional arguments onto pip
. Any arguments after --
are handed off to pip install
.
Note that huak
will use uv
instead of pip
in the future (see this issue for any updates).
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak add torch torchvision torchaudio -- --extra-index-url https://download.pytorch.org/whl/cu117
huak
will add the packages to your pyproject.toml, so passing PEP 508 strings would help persist this behavior for future installs.
Tip
You can also assign dependencies to a group using --group
.
Manually trigger dependency installation
Use the init
command again to install the project's dependencies.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak init
Use optional dependency groups
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak add --group my-group
Update dependencies
To update a dependency use the update
command.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak update xlcsv
Or attempt to update everything.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak update
Remove dependencies
To remove a dependency from the project use the remove
command.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak remove xlcsv
Support more of your workflow
Huak ships commands allowing you to format your python code, lint it, and test it.
Format your code
Use the fmt
command to format your Python project's code.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak fmt
Using --check
Warning
As of v0.0.20
huak
no longer uses black
.
Use --check
if all you want to do is verify your code is already formatted. Note that huak
currently uses ruff
to format your code. This means that --
can only pass options to ruff
. Use the [tool.ruff]
for more configuration.
Warning
huak
will exit prior to running with --check
if your imports are not sorted. See #510 for the status of this issue.
Lint your code
Use the lint
command to lint your Python project's code.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0 took 2s
❯ huak lint
The --fix
flag can be used to address any auto-fixable issues.
huak
wraps tools like ruff
for some of its commands. To configure a wrapped tool such as ruff
use the pyproject.toml file:
[tool.ruff]
# ...
huak
also uses mypy
for type-checking. To disable this behavior use --no-types
.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0 took 2s
❯ huak lint --no-types
Note
Currently, since ruff
is the default tool used by huak lint
, passing additional options with --
is reserved for ruff
. To configure mypy
use the [tool.mypy]
approach. This limitation will be addressed in future versions of huak
(see #505).
Test your code
Use the test
command to test your project.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak test
Run commands within your project's environment context
You can use huak
to run a command within the Python environment your project uses.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak run which python
/Users/chrispryer/github/my-project/.venv/bin/python
Activate the virtual environment
huak
also implements an activate
command to activate a virtual environment.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak activate
(.venv) bash-3.2$
Note
Currently huak
just runs bash --init-file
on unix systems and uses powershell
on Windows.
(.venv) PS C:\Users\chris\github\my-project>
activate
command.
Manage your Python installations
By default huak
will use the first Python interpreter found from your PATH
environment variable. You can list
these by using the python
command.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak python list
1: /Users/chrispryer/.pyenv/shims/python3.11
2: /Users/chrispryer/.pyenv/shims/python3.10
...
So huak
would use /Users/chrispryer/.pyenv/shims/python3.11
out of the box. You can use a different installed Python version with use
.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak python use 3.10
Distribute your project
Publish to PyPI
If you're building a Python package you'd like to share, use huak build
and huak publish
to build and publish the project to PyPI.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak build
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak publish
Cleaning up
Use huak clean
to clean out the dist/ directory.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0 took 26s
❯ huak clean
Configure Huak
Configure shell completion
With huak completion
you can setup shell completion for huak
.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak completion -h
Generates a shell completion script for supported shells. See the help menu for more information on supported shells
Usage: huak completion [OPTIONS]
Options:
-s, --shell <shell> [possible values: bash, elvish, fish, powershell, zsh]
-u, --uninstall Uninstalls the completion script from your shell init file. If this flag is passed the --shell is required
-h, --help Print help
Add huak completion --shell <shell>
to your shell's initialization to use this feature.
eval "$(huak completion --shell <shell>)"
Providing feedback
Any bugs or suggestions can be submitted as issues here. All feedback is welcome and greatly appreciated ❤️.
my-project on master 📦 v0.0.1 via 🐍 v3.11.0
❯ huak --version
huak 0.0.20