setup.py sdist creates an archive without the package

Viewed 103

I have a project called Alexandria that I want to upload on PyPi as a package. To do so, I have a top folder called alexandria-python in which I put the package and all the elements required to create a package archive with setup.py. The folder alexandria-python has the following structure:

|- setup.py
|- README.md
|- alexandria (root folder for the package)
  |- __init__.py
  |- many sub-packages

Then, following many tutorials to create an uploadable archive, I open a terminal, cd to alexandria-python, and use the command:

python setup.py sdist

This creates additional folders, so the structure of alexandria-python is now:

|- setup.py
|- README.md
|- alexandria (root folder for the package)
  |- __init__.py
  |- many sub-packages
|- alexandria.egg-info
|- dist

everything looks fine, and from my understanding the package should now be archived in the dist folder. But when I open the dist folder and extract the alexandria-0.0.2.tar.gz archive that has been created, it does not contain the 'alexandria' package. Everything else thus seems to be there, except the most important element: the package, as shown on the image:

enter image description here

Following, when I upload the project to test-PyPi and then pip install it, any attempt to import a module from the toolbox results in a ModuleNotFoundError. How is it that my package does not get uploaded to the archive? Am I doing something very silly?

Note: in case it can help, this is the structure of my setup.py file:

from setuptools import setup

# set up the package
setup(
    name = "alexandria",
    license = "Other/Proprietary License",
    version = "0.0.2",
    author = "Romain Legrand",
    author_email = "alexandria.toolbox@gmail.com",
    description = "a software for Bayesian time-series econometrics applications",
    python_requires = ">=3.6",
    keywords=["python", "Bayesian", "time-series", "econometrics"])
1 Answers

Your setup.py has neither py_modules nor packages. Must have one of those. In your case alexandria is a package so

setup(
…
    packages = ['alexandria'],
…
)

or

from setuptools import find_packages, setup

…

    packages = find_packages('.')
Related