Setup.py sdist создает архив без пакета

У меня есть проект под названием Alexandria, который я хочу загрузить на PyPi в виде пакета. Для этого у меня есть верхняя папка с именем alexandria-python, в которую я помещаю пакет и все элементы, необходимые для создания архива пакета с помощью setup.py. Папка alexandria-python имеет следующую структуру:

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

Затем, следуя многим руководствам по созданию загружаемого архива, я открываю терминал, cd на alexandria-python и использую команду:

python setup.py sdist

Это создает дополнительные папки, поэтому структура alexandria-python теперь выглядит так:

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

все выглядит нормально, и, насколько я понимаю, пакет теперь должен быть заархивирован в папке dist. Но когда я открываю папку dist и извлекаю созданный архив alexandria-0.0.2.tar.gz, он не содержит пакета alexandria. Таким образом, кажется, что все остальное есть, кроме самого важного элемента: упаковки, как показано на изображении:

Setup.py sdist создает архив без пакета

После этого, когда я загружаю проект в test-PyPi, а затем устанавливаю его, любая попытка импортировать модуль из панели инструментов приводит к ошибке ModuleNotFoundError. Почему мой пакет не загружается в архив? Я делаю что-то очень глупое?

Примечание: если это может помочь, вот структура моего файла setup.py:

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"])

1
26
1

Ответ:

Решено

У вашего setup.py нет ни py_modules, ни packages. Должен быть один из них. В вашем случае alexandria это пакет, поэтому

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

или

from setuptools import find_packages, setup

    packages = find_packages('.')