PyPI - пакет не содержит файлов - PullRequest
1 голос
/ 16 апреля 2019

Я следовал этому учебнику , чтобы загрузить пакет в PyPI.Мой пакет теперь загружен в тестовый экземпляр индекса: https://test.pypi.org/project/ilya-ezplots/#files. Однако, когда я устанавливаю его с помощью pip, я все равно не могу его импортировать.

>>> import ilya_ezplots
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'ilya_ezplots'

Я проверил пакеты сайтов моего интерпретатора python и нашел только каталог ilya_ezplots-0.0.2.dist-info.Для других пакетов будет две директории, например h5py-2.9.0.dist-info и h5py.

My setup.py:

import setuptools

setuptools.setup(
    name="ilya_ezplots",
    version="0.0.2",
    packages=['plots'],
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
)

Скрипт загрузки:

#!/usr/bin/env bash

rm -r dist
python setup.py sdist bdist_wheel
python -m twine upload -r testpypi dist/* -u ikamensh

Структура файла:

./
./plots/__init__.py
./setup.py
./upload.sh

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Позвольте мне указать вам на мой предыдущий ответ: https://stackoverflow.com/a/54599368/7976758

ilya_ezplots - это имя вашего дистрибутива, но это не импортируемое имя. Импортируемое имя после установки - plots. Итак:

import plots
0 голосов
/ 16 апреля 2019

Как ответил @phd, вы должны импортировать: import plots.

или вам следует изменить структуру каталогов на:

./ilya_ezplots/__init__.py

И тогда import ilya_ezplots может сделать трюк.

Имя импорта должно соответствовать родительскому каталогу.

См. этот пост, чтобы сохранить правильную структуру и передовой опыт.

Хорошей практикой является поддержание некоторого пространства имен или того же имени каталога, что и имя вашего пакета, чтобы пользователь не запутался.

если имя вашего проекта xyz, вам следует сохранить имя каталога как xyz. Таким образом, использование может сделать import xyz для импорта вашего пакета и не будет перепутано с другим пакетом. Например, если вы используете yyy в качестве имени каталога (а имя вашего пакета xyz), тогда пользователи могут запутаться и установить вместо него пакет yyy.

Один пример из реальной жизни:

пакету Beautifulsoup требуется import bs4 для его импорта, и поэтому они поддерживают пакет bs4 (фиктивный пакет), чтобы никто не мог создать пакет с именем bs4, так как это может стать безопасностью. риск.

...