Python3 готовит пакеты для PyPi, не включая подмодули - PullRequest
0 голосов
/ 31 августа 2018

Примечания:

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

1 Ответ

0 голосов
/ 31 августа 2018

Разумность проверки имен импорта верхнего уровня дистрибутива с помощью моего проекта 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(), и фактически нет причин, по которым имя дистрибутива должно совпадать с именами пакетов.

...