I am trying to package my project in order to upload it in PyPI. I have the following directory structure:
.
├── docs
├── LICENSE
├── pyproject.toml
├── README.md
├── src
│ ├── package_name
│ │ ├── __init__.py
│ │ ├── data.json
│ │ ├── __main__.py
│ │ ├── utils.py
└── tests
My package is in under src named src/package_name.
The pyproject.toml has the following lines:
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "project_name"
version = "0.0.1"
authors = [{name = "Foo Bar"}]
license = {text = "GPL-3.0-only"}
description = "A small example package"
readme = "README.md"
requires-python = ">=3.10"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: POSIX :: Linux",
]
[project.urls]
Homepage = "https://example.com"
I want a user to be able to perform the installation as:
pip install project_name
but use the code as:
>>> from package_name import x
Is there any way to achieve this with Hatch? I have read the Build-instructions but can't find how.
Note
I have tried the following:
python3 -m build
python3 -m twine upload --repository testpypi dist/*
pip install --upgrade -i https://test.pypi.org/simple/ project_name
The problem is when I type:
>>> import package_name
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'package_name'
I searched into path/to/site-packages but only path/to/site-packages/project_name-0.0.1.dist-info is there. Any ideas?
Tried to solve my problem based on this Tutorial.
The reason I used Hatch is because it was presented in the tutorial. Αn alternative solution (using also pyproject.toml with different backend) is also appreciated.
Edit
I have updated the directory structure as proposed in the comments.
I found the solution to my problem by simply switching to
setuptoolsas backend and modifying thepyproject.tomlas following:My solution is based on the setuptools Documentation.