{"id":35205555,"url":"https://github.com/rob-blackbourn/psycho","last_synced_at":"2026-05-20T09:39:33.720Z","repository":{"id":286458886,"uuid":"961457763","full_name":"rob-blackbourn/psycho","owner":"rob-blackbourn","description":"Crazy python project automation","archived":false,"fork":false,"pushed_at":"2025-08-24T09:08:56.000Z","size":6013,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-06T10:53:21.474Z","etag":null,"topics":["build","pip","pyproject-toml","python","setuptools","twine","venv"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rob-blackbourn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-06T15:09:36.000Z","updated_at":"2025-09-01T22:31:48.000Z","dependencies_parsed_at":"2025-07-26T13:32:45.611Z","dependency_job_id":null,"html_url":"https://github.com/rob-blackbourn/psycho","commit_stats":null,"previous_names":["rob-blackbourn/psycho"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/rob-blackbourn/psycho","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-blackbourn%2Fpsycho","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-blackbourn%2Fpsycho/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-blackbourn%2Fpsycho/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-blackbourn%2Fpsycho/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rob-blackbourn","download_url":"https://codeload.github.com/rob-blackbourn/psycho/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rob-blackbourn%2Fpsycho/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33253749,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-20T04:48:54.280Z","status":"ssl_error","status_checked_at":"2026-05-20T04:48:10.851Z","response_time":356,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build","pip","pyproject-toml","python","setuptools","twine","venv"],"created_at":"2025-12-29T13:43:42.848Z","updated_at":"2026-05-20T09:39:33.715Z","avatar_url":"https://github.com/rob-blackbourn.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Let's go psycho!\n\nPython project management automation using standard build tools.\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/rob-blackbourn/psycho/raw/main/psycho-demo.gif\"\u003e\n\u003cimg src=\"https://github.com/rob-blackbourn/psycho/raw/main/psycho-demo.gif\"/\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n## Status\n\nThis project is a working prototype.\n\nThis package is available from [pypi](https://pypi.org/project/psycho/),\nbut the best way to install it is with [pipx](https://github.com/pypa/pipx).\n\n```bash\npipx install psycho\n```\n\n## Overview\n\nPython projects are migrating away from using `setup.py` to `pyproject.toml`.\nWhile a number of excellent projects provide custom tooling, there is no built\nin support for automating project management with just the standard tools:\n\n* [setuptools](https://pypi.org/project/setuptools/)\n* [pip](https://pypi.org/project/pip/)\n* [build](https://pypi.org/project/build/)\n* [twine](https://pypi.org/project/twine/)\n\n## Psychotic Commands\n\nThe following are supported.\n\n* init\n* install\n* uninstall\n* build\n* upload\n* publish\n\n### init\n\nMakes a new `pyproject.toml`. The command prompts for input.\n\n```bash\n$ psycho init\nName: my-package\nVersion [0.1.0]: \nDescription: My package\nAuthor: rob\nEmail: rob@example.com\nInitializing my-package\n```\n\nAlternatively values can be provided as arguments.\n\n```bash\n$ psycho init \\\n    --name my-package \\\n    --version 0.1.0 \\\n    --description \"My package\" \\\n    --author \"Rob Blackbourn\" \\\n    --email \"rob@example.com\"\n```\n\nOr by passing `-y` to accept the defaults.\n\n```bash\n$ psycho init -y\n```\n\nThis creates the standard project structure, with a local virtual environment.\nIt will also upgrade pip and install the project in the virtual environment.\n\nThe following flags are also supported:\n\n* `--no-venv` to not create a virtual environment.\n* `--no-tests` to not create the tests folder.\n* `--no-upgrade` to prevent the venv dependencies being upgraded (pip).\n* `--venv \u003cvenv-name\u003e` to give the venv folder a specific name (the default is \".venv\").\n\n### install\n\nWhen used without specifying packages this command installs the project as editable.\n\n```bash\n$ psycho install\n```\n\nThis is the equivalent of `pip install --editable .`.\n\nWhen used with a package requirement, the requirement is written to the `pyproject.toml`\nand the package is installed into the python environment using `pip`.\n\n```bash\n$ psycho install \"pandas\u003e=1.5.3\"\n```\n\nThe `-optional` flag can be used (with a group name) to add an optional dependency.\n\n```bash\n$ psycho install --optional dev pytest\n```\n\nMost the flags used by pip are available to this command.\n\n### uninstall\n\nThis command removes a package from the `pyproject.toml` file, and uninstalls\nit using `pip`.\n\n```bash\n$ psycho uninstall pandas\n```\n\nThis can be used with the optional flag (with a group name) to uninstall an optional\ndependency.\n\n```bash\n$ psycho uninstall --optional dev pytest\n```\n\n### build\n\nThe build command will build a package, prior to publishing it.\n\n```bash\n$ psycho build\n```\n\nThis is the equivalent of `python -m build`.\n\n### upload\n\nThe upload command will upload a package with twine.\n\n```bash\n$ psycho upload\n```\n\nThis is the equivalent of `twine upload dist/*`.\n\n### publish\n\nThis combines the build and publish in one command.\n\n```bash\n$ psycho publish\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frob-blackbourn%2Fpsycho","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frob-blackbourn%2Fpsycho","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frob-blackbourn%2Fpsycho/lists"}