【问题标题】:How to structure a project with multiple files and internal dependencies to be uploaded to PyPI如何构建具有多个文件和内部依赖项的项目以上传到 PyPI
【发布时间】:2018-09-18 18:32:55
【问题描述】:

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

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

这三个文件中的每一个都包含一个与文件同名的类(即,要使用这个类,需要from MLP import MLP)。这是 __init__.py 文件所需的正确内容吗?

如果我从创建项目的目录中运行此文件,它运行良好。但是,当我将项目上传到 PyPI(或者甚至在本地执行 pip install . 以 pip 安装它)时,我收到以下错误:

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,我可以进行 pip 安装,然后执行以下操作:

from TFNeuralNetworks import RNN

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

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

【问题讨论】:

  • from . import NeuralNetwork
  • 好的,在发生类似错误之前,这更进一步。 MLPRNN 类都是 NeuralNetwork 的子类,因此它们都有 from NeuralNetwork import NeuralNetwork。这现在抛出一个错误,应该如何解决?
  • from TFNeuralNetworks import NeuralNetworks 或同上。
  • 这让我非常困惑,我现在收到更多错误。我根本不理解这个必需的结构。有没有办法可以编写代码和这些导入以使文件可以从目录中本地运行,也可以上传到 PyPI 然后安装 pip?
  • @PeterWood 我可以请你看看这里的代码:github.com/KevOBrien/TFNeuralNetworks 并推荐它应该如何构建和正确完成导入吗?

标签: python pip setuptools distutils pypi


【解决方案1】:

通过查看您的存储库,您应该按照以下方式使用您的导入

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()

【讨论】:

  • 这似乎奏效了,除了现在当我打电话给from TFNeuralNetworks import RNN 时,我收到一个错误:RNN.py", line 48, in &lt;module&gt; class RNN(NeuralNetwork): TypeError: module.__init__() takes at most 2 arguments (3 given)。我不明白这是指哪个__init__() 方法。
  • 另外,有没有办法构建这些依赖项和导入,以便我可以从其目录本地运行我的代码,以及将其上传到 PyPI?
  • 我的想法是有一个try: from . import NeuralNetwork except Exception as e: import NeuralNetwork
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
相关资源
最近更新 更多