pip install <.whl file> installs dist_info but doesn't actually install the package

Question:

I’m trying change my package over from using setup.py to using pyproject.toml and setup.cfg.

My setup.cfg is roughly as follows:

[metadata]
name = our_name
version = 0.1.1
author = me

[options]
install_requires =
    networkx >= 3.0

My code is all under src, and I’m relying on the automatic src-layout discovery mechanism.

When I run

python -m build

it generates a proper wheel file (dist/our_name-0.1.1-py3-none-any.whl). When I unpack that wheel file, everything is in there properly – it seems to have discovered all my code correctly.

However, when I install it (pip install dist/our_name*.whl), only the distribution info directory shows up in site-packages. Because the dist info is there, pip list shows it as being there, but because the actual module directory is missing, I can’t import anything from my module elsewhere, or do anything with it.

Any clue what I’m doing wrong?

Addendum: Per sinoroc’s comment:
pyproject.toml:

[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

project structure:

README.md
requirements.txt
src
  __init__.py
  module_1
    __init__.py
    foo.py
  module_2
    __init__.py
    bar.py

Wheel contents:

__init.py__
our_name-0.1.1.dist-info
  METADATA
  RECORD
  top_level.txt
  WHEEL
module_1
  __init__.py
  foo.py
module_2
  __init__.py
  bar.py
Asked By: Nathan Kronenfeld

||

Answers:

It seems like maybe you misunderstood what the src layout is. This project structure your are showing does not have a typical src layout. For example there should not be any src/__init__.py file. And also I am wondering if you really want to have 2 importable top-level packages module_1 and module_2, because it seems to be what you have right now and that is also not typical.

I recommend you look at this packaging tutorial and this part of setuptools documentation again. Pay attention to the project directory structure.

Answered By: sinoroc