如何构建具有多个文件和内部依赖项的项目以上传到PyPI

时间:2018-09-18 18:32:56

标签: python pip setuptools distutils pypi

我创建了一个具有以下结构的项目:

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'

我从几个在线教程中都遵循了这种结构,看不到我要去哪里错了-这是什么问题?

编辑:

我仍然无法解决这个问题。我想要做的就是创建一个from this code base程序包,可以进行点安装,然后执行以下操作:

from TFNeuralNetworks import RNN

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

同时还允许我在本地运行代码进行测试。

1 个答案:

答案 0 :(得分:0)

From looking into your repository, you should use your imports as following

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

As far as I can remember in py3 you can then use modules internally like

NeuralNetwork.NeuralNetwork

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

That way you will be able to instal with pip. Next, you can use it like so

from neuralnetwork import RNN

RNN.do_some_code()