подпакеты не могут быть импортированы после установки пакета с помощью pip - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть проект под названием build-your-own-computer со структурой, которая выглядит следующим образом:

build-your-own-computer
├── computer
│   ├── arithmetic
│   ├── __init__.py
│   ├── logic
│   └── memory
├── README.md
├── setup.py
├── setup.py~
├── solutions
│   ├── arithmetic
│   │   ├── half_adder.py
│   │   ├── __init__.py
│   │   └── __init__.py~
│   ├── __init__.py
│   ├── __init__.py~
│   ├── logic
│   │   ├── _and.py
│   │   ├── __init__.py
│   │   ├── __init__.py~
│   │   ├── _not.py
│   │   ├── _or.py
│   │   └── xor.py
│   └── memory
│       └── __init__.py
└── tests
    ├── arithmetic
    │   └── test_half_adder.py
    ├── logic
    │   ├── test_and.py
    │   ├── test_not.py
    │   ├── test_or.py
    │   └── test_xor.py
    └── memory

Моя цель - иметь возможность установить этот проект / пакет с помощью pip, а затем использовать это из любой точки моей системы. Я хочу импортировать пакеты / модули следующим образом:

from byoc.solutions.logic import _and
from byoc.computer.arithmetic import half_adder

Насколько я понимаю, build-your-own-computer сам по себе можно считать пакетом, build-your-own-computer\computer подпакетом и build-your-own-computer\computer\logic\ подпунктом. пакет. Все файлы .py кроме init и setup.py являются модулями. Правильно ли это, и соответствует ли приведенная выше схема импорта этой структуре проекта?

Все файлы __init__.py пусты.

setup.py содержит следующее:

from setuptools import setup, find_packages

setup(
    name='byoc',
    packages=find_packages()
)

Когда я устанавливаю это с помощью pip и затем пытаюсь импортировать подмодули, у меня возникают проблемы:

>>> from byoc.solutions.logic import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'byoc.solutions'

Я могу импортировать byoc без ошибок.

Я, очевидно, делать что-то не так, но что?

1 Ответ

0 голосов
/ 20 апреля 2020

Вы можете проверить здесь предлагаемый макет с помощью setuptools. Также здесь является хорошим руководством. Вот мое предложение по вашему макету:

build-your-own-computer
├── README.md
├── setup.py
├── setup.cfg
├── src
│   └── byoc
│       ├── __init__.py
│       ├── computer
│       │   ├── arithmetic
│       │   ├── __init__.py
│       │   ├── logic
│       │   └── memory
│       └── solutions
│           ├── arithmetic
│           │   ├── half_adder.py
│           │   └── __init__.py
│           ├── __init__.py
│           ├── logic
│           │   ├── _and.py
│           │   ├── __init__.py
│           │   ├── __init__.py~
│           │   ├── _not.py
│           │   ├── _or.py
│           │   └── xor.py
│           └── memory
│               └── __init__.py
└── tests
    ├── arithmetic
    │   └── test_half_adder.py
    ├── logic
    │   ├── test_and.py
    │   ├── test_not.py
    │   ├── test_or.py
    │   └── test_xor.py
    └── memory

И тогда ваш setup.py должен быть:

from setuptools import setup, find_packages

setup(
    name='byoc',
    packages=find_packages('src/')
    package_dir={'': 'src/'},
)

Таким образом, вы сможете импортировать его куда угодно, например:

from byoc.solutions import logic
...