Я следовал этому учебнику, чтобы загрузить пакет в PyPI. Мой пакет теперь загружен в тестовый экземпляр индекса: https: //test.pypi .org / проект / Ilya- ezplots / # файлы. Однако, когда я устанавливаю его с помощью 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.

Мой 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
1
ikamen 16 Апр 2019 в 20:25

2 ответа

Лучший ответ

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

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

import plots
1
phd 16 Апр 2019 в 17:34

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

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

./ilya_ezplots/__init__.py

И тогда import ilya_ezplots может добиться цели.

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

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

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

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

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

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

0
R4444 16 Апр 2019 в 17:50