0

我正在python中启动一个项目,现在的代码结构如下:

project/
        __init__.py
        a.py
        b.py
        mainA.py
        utilities/
                   __init__.py
                   mainB.py
                   c.py

这些__init__文件都是空白的。

我想utilities/mainB.py作为一个程序运行(使用类似的东西python main.py),并且 mainB 需要导入a.pyb.py. 所以我尝试from .. import a了一些其他的方法,但都import失败了。错误信息是:

ValueError:尝试在非包中进行相对导入

那么问题来了:

  1. 如何修复mainB.py它可以作为主程序运行?
  2. mainA.py现在可以作为主程序运行,它还可以导入a.pyb.py(使用import aand import b)。我认为代码结构可能会变得更加复杂。说,如果mainA.py必须从中导入模块project/some/directory,我该怎么做?
4

3 回答 3

3

请参阅上一个问题。你有两个选择。一种是使用PEP 366__package__中描述的属性来设置模块的相对名称。另一种是将脚本作为模块执行(使用解释器的标志),而不是直接将它们作为脚本运行。-m

于 2012-08-29T07:28:25.427 回答
0

您可以使用 Python 的内置模块运行功能 ( python -m <module>)。

python -m project.utilities.mainB

这允许您将 mainB 作为包的一部分正常编写,因此相对和绝对导入都可以正常工作。

有关此功能的深入讨论,请参阅PEP-338

于 2012-08-29T07:24:03.903 回答
0

您应该在 PYTHON_PATH 中添加“项目”目录,然后在 mainB.py 中:

from project import a
于 2012-08-29T07:28:58.467 回答