A simple tool to create a Python project structure
Project description
๐ค๐ฆ Proyectify: A Command-Line Tool for Quick Python Project Setup
Proyectify is a command-line tool that generates and sets up a Python project structure with all necessary configurations, including a virtual environment, IDE setup, Git integration, and documentation generation with MkDocs.
Features
- Creation of the basic project structure with predefined folders.
- Configuration of base files such as pyproject.toml, .gitignore, Makefile, etc.
- Creation of a virtual environment with the specified Python version.
- Initialization of a Git repository.
- Installation of necessary packages such as ruff, pre-commit, mkdocs, mkdocstrings.
- Setup for popular IDEs (VScode, Pycharm).
- Automatic documentation generation for modules.
Prerequisites
- Python 3.8 or higher.
Dependency Installation
Installing uv
To install uv
, follow the instructions for your operating system:
macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows
irm https://astral.sh/uv/install.ps1 | iex
Installing make
(only on Windows)
choco install make
Usage
Running the package
To run the package and set up your project, use the following command:
choco install make
Interactive Options
During script execution, you will be prompted for the following options:
- Project Name: Enter the name of your new project.
- IDE Selection: Select your favorite IDE (VScode, Pycharm, Other).
- Python Version: Select the Python version to use. If only one version is installed, it will be used automatically.
Project Structure
The package will generate the following folder structure:
<project_name>/
โ
โโโ app/
โ โโโ main.py
โโโ artifacts/
โโโ data/
โโโ docs/
โ โโโ index.md
โโโ images/
โโโ modules/
โ โโโ __init__.py
โโโ notebooks/
โโโ scripts/
โ โโโ generate_docs.py
โโโ utils/
โ โโโ __init__.py
โโโ .dockerignore
โโโ .env
โโโ .gitignore
โโโ .pre-commit-config.yaml
โโโ Dockerfile
โโโ Makefile
โโโ mkdocs.yml
โโโ pyproject.toml
โโโ README.md
Documentation Generation
To generate and serve documentation with MkDocs, use the following commands:
make docs
To generate documentation for modules, run:
make generate-docs
Configuration Details
uv
for Virtual Environments
Proyectify uses uv, an extremely fast Python package installer and resolver written in Rust, as the virtual environment manager. For more information, refer to the uv documentation.
ruff
for Linting and Formatting
Proyectify uses ruff as the linter and formatter. Ruff is An extremely fast Python linter and code formatter, written in Rust. For more information, refer to the ruff documentation
A base configuration is provided in the pyproject.toml file:
[tool.ruff]
line-length = 88
indent-width = 4
include = ["pyproject.toml", "src/**/*.py"]
extend-include = ["*.ipynb"]
[tool.ruff.lint]
select = ["E4", "E7", "E9", "F"]
ignore = []
fixable = ["ALL"]
unfixable = []
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
[tool.ruff.format]
quote-style = "single"
skip-magic-trailing-comma = false
line-ending = "auto"
docstring-code-format = true
docstring-code-line-length = "dynamic"
mkdocs
for Documentation
Proyectify automates documentation generation using mkdocs
and the mkdocstrings
plugin to incorporate the docstrings of each module into the documentation. The mkdocs.yml
configuration is provided to get you started:
site_name: Project Documentation
nav:
- Home: index.md
- Notebooks: notebooks.md
plugins:
- mkdocstrings
theme: readthedocs
Scripts
generate_docs.py
This script traverses the modules
and utils
folders and creates .md
files in the docs directory with the documentation content of each module.
import os
def generate_docs_for_folder(folder_name):
docs_folder = 'docs'
folder_path = os.path.join(docs_folder, folder_name)
os.makedirs(folder_path, exist_ok=True)
folder_files = [f for f in os.listdir(folder_name) if f.endswith('.py') and not f.startswith('__')]
content_lines = [f"# {folder_name.capitalize()} Documentation\n"]
for file in folder_files:
module_name = file.replace('.py', '')
content_lines.append(f"::: {folder_name}.{module_name}\n")
md_file_path = os.path.join(docs_folder, f"{folder_name}.md")
with open(md_file_path, 'w') as md_file:
md_file.write('\n'.join(content_lines))
if __name__ == "__main__":
folders_to_process = ['modules', 'utils']
for folder in folders_to_process:
if os.path.exists(folder):
generate_docs_for_folder(folder)
This script is automatically executed when running the make generate-docs
command. (Feel free to modify it according to your needs).
Contribution
If you'd like to contribute to this project, you're welcome to submit a pull request or open an issue in the repository.
License
This project is licensed under the MIT License. For more details, please refer to the LICENSE file.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for projectify-0.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c53698b4403f88ba9058003e494bb775371a54c9032809dfe26da165257c2b22 |
|
MD5 | fcbe4eab4d8c53a266a75031d91e280a |
|
BLAKE2b-256 | 3a8b332ad7060a9e5e5430420be6e4fd2c1147394a729db52696d3c3f1eaa57e |