Python3 готовит пакеты для PyPi, не включая подмодули

Заметки:

  1. Я использую Python v3.6
  2. Я прочитал документацию по модулям и пакетам.
  3. Я прочитал и прошел через руководство по проекту упаковки.
  4. Я просмотрел пример проекта (отличается от учебного проекта)

У меня есть простой пакет, который я хочу сделать

myPackage/                      The project directory
    myPackage/                  Top-level package
      __init__.py               Initialize my package
      myClass.py                a file with a single class in it

    setup.py
    README.md
    ...
    dist/

где myClass.py просто

class myClass:
    __init__(self):
        print('here')

и мой файл myPackage/__init__.py такой же, как демо

name = "myPackage"

Я успешно получил его на pypi, и pip установил его.

Я могу import myPackage, но в отличие от туториала, где

example_pkg.name

работает,

myPackage.name

не.

Приведенный выше пример проекта не совсем точно описывает файл init.py.

Итак, мой вопрос заключается в следующем:

предположим, что у кого-то был такой пакет в документации для модулей и пакетов:

sound/                          Top-level package
      __init__.py               Initialize the sound package
      formats/                  Subpackage for file format conversions
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  Subpackage for sound effects
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  Subpackage for filters
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

где находится фактическая файловая структура (следуя руководству по проекту упаковки)

sound/
    sound/ (Top-level package)
        __init__.py
        ...
    dist/
    build/
    sound.egg/
    README.md
    ...

Что входит в sound/__init__.py (или myPackage/__init__.py), чтобы я мог импортировать его и получить доступ к его функциям, подмодулям и классам?

Извините за то, что я нуб в упаковке Python.

# contents of setup.py
import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="progil",
    version="0.0.4",
    author="name",
    author_email="name@web",
    description="Progress In Line",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://pypi.org/project/progil/",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
)

person SumNeuron    schedule 31.08.2018    source источник
comment
Ваш myClass.py файл точен? Вы пропустили class ключевое слово.   -  person Chris    schedule 31.08.2018
comment
@ Крис, здесь просто макет, я написал в вопросе, поэтому, пожалуйста, простите эти ошибки.   -  person SumNeuron    schedule 31.08.2018
comment
Тогда отредактируйте вопрос. У нас нет способа узнать, какие ошибки важны, а какие следует игнорировать. Что значит не работает? Поднимает ли myPackage.name AttributeError? Он содержит None? Пустая строка?   -  person Chris    schedule 31.08.2018
comment
@wim pypi.org/project/progil   -  person SumNeuron    schedule 31.08.2018
comment
@Chris готово, и NameError   -  person SumNeuron    schedule 31.08.2018


Ответы (1)


Проверка работоспособности имен импорта верхнего уровня дистрибутива с помощью моего проекта johnnydep:

# pip install johnnydep
$ johnnydep progil --fields name summary versions_available import_names
name    summary           versions_available    import_names
------  ----------------  --------------------  --------------
progil  Progress In Line  0.0.2, 0.0.3, 0.0.4   progril

Вы собираетесь ударить себя. Похоже, вы назвали дистрибутив:

progil

Но вы назвали пакет в исходном коде

progril

pip установка progil и импорт progril работают. Вы не заметили во время установки, потому что использовали find_packages(), и на самом деле нет причин, по которым имя дистрибутива должно совпадать с именем(ями) пакета.

person wim    schedule 31.08.2018
comment
о нет. Клавиатура новая и лень досконально проверять перед публикацией. Мои извинения. Можете ли вы дать мне ссылку на подробное (для начинающих) руководство о том, что делать с файлом основных пакетов __init__.py? и если у меня есть файл в подмодулеmyClass.py, в котором есть только class myClass, есть ли способ импортировать его из модуля верхнего уровня? - person SumNeuron; 31.08.2018
comment
@SumNeuron Пожалуйста, сначала попробуйте сами несколько очевидных вещей, и если они не сработают, откройте новый вопрос. SO старается не быть чат-сайтом. - person wim; 31.08.2018