【发布时间】:2019-01-13 22:40:28
【问题描述】:
我正在使用 python Flask 制作一个网站(不需要回答问题的烧瓶知识)。在我的 PC 上,我正在运行 python 2.7.15,并且该应用程序运行良好。当我使用 python 2.7.15rc1 将它移到我的 Ubuntu 网络服务器上时,它停止工作。我正在使用某种循环导入,但我确保它一切正常(我可以很好地处理循环导入)。这是回溯:
Traceback (most recent call last):
File "/var/www/OpenNoteFlask/opennoteflask.wsgi", line 7, in <module>
from OpenNoteFlask import app as application
File "/var/www/OpenNoteFlask/OpenNoteFlask/__init__.py", line 1, in <module>
from OpenNoteFlask import create_app
File "/var/www/OpenNoteFlask/OpenNoteFlask/OpenNoteFlask/__init__.py", line 11, in <module>
from OpenNoteFlask.config import Config
ImportError: No module named config
这是我的文件结构:
(The numbers in parenthesis are to distinguish the files and folders here.
They do not appear in the actual names of the files and folders)
OpenNoteFlask (1)
__init__.py (1)
OpenNoteFlask (2)
__init__.py (2)
config.py
在__init__.py (1) 里面我有from OpenNoteFlask import create_app(它发现导入成功)。
在__init__.py (2) 里面我有from OpenNoteFlask.config import Config(它没有找到导入)。同样,这只发生在我的 Ubuntu 网络服务器上,而不是我的 PC 上。
我已经试过了:
import sys
sys.path.insert(0, "path to parent of OpenNoteFlask (2)")
from OpenNoteFlask.config import Config
但这不会改变任何事情。
重申一下,我有包OpenNoteFlask,其中有一个__init__.py 文件,该文件导入了相同的OpenNoteFlask 包的config.py 模块,但找不到该模块。这只发生在运行 python 2.7.15rc1 的 Ubuntu 网络服务器上,但在运行 python 2.7.15 的 PC 上运行良好。
为什么会发生这种情况,我该如何解决或解决它?
编辑:解决方案
我并没有直接将所有内容命名为相同的名称。这就是问题所在,正如 cmets 中指出的那样:
在我的电脑上,这是文件结构:
OpenNote
__init__.py
OpenNoteFlask
__init__.py
config.py
在我的网络服务器上,这是文件结构:
OpenNoteFlask
__init__.py
OpenNoteFlask
__init__.py
config.py
问题最终是因为我在一个名为 OpenNoteFlask 的包内有一个名为 OpenNoteFlask 的包,所以导入 from OpenNoteFlask ... 不明确。 Python 将该导入解释为从父包而不是子包导入。解决方案是使两个包名称不同(例如在我的 PC 上)。
【问题讨论】:
-
为什么在一个名为
OpenNoteFlask的包中还有一个名为OpenNoteFlask的包?这只会使import OpenNoteFlask在OpenNoteFlask中产生歧义,因为它可能是相对的或绝对的。我不确定这是否是问题的原因,但它肯定没有帮助。 -
@zvone 啊,我明白了。我不知道我在想什么。现在我想了想,错误正在发生是有道理的。我能够确定这是问题所在。我会把它添加到我的问题中。
-
@PaoloCastro 请添加解决方案作为此问题的单独答案。
标签: python import package circular-dependency