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
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.
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
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.