Search code examples
pypisetup.pymodulenotfounderror

setup.py sdist creates an archive without the package


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 = "[email protected]",
    description = "a software for Bayesian time-series econometrics applications",
    python_requires = ">=3.6",
    keywords=["python", "Bayesian", "time-series", "econometrics"])

Solution

  • 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('.')