Я следовал этому руководству, чтобы загрузить пакет в 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
.
Мой 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
Позвольте мне указать вам на мой предыдущий ответ: qaru.site/questions/17281424/...
ilya_ezplots
- это имя вашего дистрибутива, но не импортируемое имя. Импортируемое имя после установки - plots
. Так:
import plots
setup.py
.
Как ответил @phd, вы должны импортировать: import plots
.
или вы должны изменить структуру каталогов на:
./ilya_ezplots/__init__.py
И тогда import ilya_ezplots
может сделать import ilya_ezplots
дело.
Имя импорта должно соответствовать родительскому каталогу.
Обратитесь к этому сообщению, чтобы сохранить правильную структуру и передовой опыт.
Хорошей практикой является поддержание некоторого пространства имен или того же имени каталога, что и имя вашего пакета, чтобы пользователь не запутался.
если ваш проект называется xyz
вы должны сохранить имя каталога как xyz
. Таким образом, использование может выполнить import xyz
для импорта вашего пакета и не будет перепутано с другим пакетом. Например, если вы используете yyy
качестве имени каталога (а имя вашего пакета - xyz
), тогда пользователи могут запутаться и вместо этого установить пакет yyy
.
Один реальный пример из жизни:
Пакет Beautifulsoup нуждается в import bs4
чтобы импортировать его, и, следовательно, он поддерживает пакет bs4
(фиктивный пакет), чтобы никто не мог создать пакет с именем bs4
поскольку это может стать угрозой безопасности.
./ilya_ezplots/__init__.py
не./plots/__init__.py