Как структурировать проект с несколькими файлами и внутренними зависимостями для загрузки в PyPI - PullRequest
0 голосов
/ 18 сентября 2018

Я создал проект, который имеет следующую структуру:

TFNeuralNetworks/
    .git/
    .gitignore
    LICENSE
    README.md
    setup.py
    TFNeuralNetworks/
        __init__.py
        MLP.py
        NeuralNetwork.py
        RNN.py

TFNeuralNetworks/setup.py содержит все соответствующие параметры для вызова setuptools.setup().

TFNeuralNetworks/TFNeuralNetworks/__init__.py содержит толькоследующее:

import NeuralNetwork
import MLP
import RNN

Каждый из этих 3 файлов содержит один класс с тем же именем, что и файл (т. е. для использования этого класса потребуется from MLP import MLP).Это правильное содержимое, необходимое для этого __init__.py файла?

Если я запускаю этот файл из каталога, в котором я создаю проект, он работает нормально.Однако, когда я загружаю проект в PyPI (или даже выполняю pip install . для его локального отображения), я получаю следующую ошибку:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/kevin/Documents/TFNeuralNetworks/TFNeuralNetworks/__init__.py", line 1, in <module>
    import NeuralNetwork
ModuleNotFoundError: No module named 'NeuralNetwork'

Я проследил эту структуру из нескольких онлайновых руководств и могу:не понимаю, где я иду не так - что за проблема здесь?

РЕДАКТИРОВАТЬ:

Я до сих пор не могу разобраться с этим.Все, что я хочу сделать, это создать пакет из этой базы кода , который я могу установить pip, а затем сделать что-то вроде:

from TFNeuralNetworks import RNN

rnn = RNN(num_inputs=2, num_outputs=1, hidden_sizes=[100])

, но при этом также разрешитьмне запустить код локально для тестирования.

1 Ответ

0 голосов
/ 18 сентября 2018

Посмотрев в свой репозиторий, вы должны использовать свой импорт следующим образом

MLP.py
  from . import NeuralNetwork
RNN.py
  from . import NeuralNetwork
__init__.py
  (LEAVE BLANK)

Насколько я помню, в py3 вы можете использовать модули внутри себя как

NeuralNetwork.NeuralNetwork

# or if you prefer
from . import NeuralNetwork.NeuralNetwork as NeuralNetwork

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

from neuralnetwork import RNN

RNN.do_some_code()
...