我正在尝试运行特定的代码,现在需要以下Python文件的导入,并且出现错误,我构造了一个玩具示例来说明问题。我在Python版本3.6.3上运行。
请考虑以下文件夹结构。
root
|- outside.py
|- folA
|- __init__.py
|- inside.py
|- folB
|- __init__.py
|- eveninside.py
现在这些文件的内容如下。
outside.py
import folA.inside
print("Outside")
inside.py
import folB.eveninside
print("Inside")
eveninside.py
print("Even Inside") #All inits are empty
现在,当我运行 inside.py 时,一切运行得很好,并具有预期的输出。
但是,当我在outside.py上运行时,出现错误消息“没有名为folB的模块”。我尝试附加系统路径,但没有任何更改。请向我解释如何解决此问题。
答案 0 :(得分:-1)
这只是来自python从python路径查找模块这一事实。在这里,当您在外部启动时,他会尝试查看您的目录中outside.py中是否存在folB。
两种解决方案。
您可以在inside.py中使用ggplot(data,aes(x=value)) + geom_histogram() + scale_x_continuous(trans='log2')
来添加目录folA作为尝试导入模块时要查找的位置。我不知道这是一种很好的做法。
在您的情况下,您可以只在inside.py`import folA.folB.eveninside中编写。但是显然,当您启动inside.py时,它将无法工作。在这种情况下,您有第一个解决方案。
答案 1 :(得分:-1)
如果只希望从outside.py运行该程序,则可以将此代码添加到outside.py中的include中:
import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '.')))
并使用以下代码将context.py添加到包结构的每个级别:
import os
import sys
path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
sys.path.insert(0, path)
_ = ''
然后您可以将其导入代码中,以使其了解程序包的结构。
即inside.py将有
from .context import _
免责声明:此代码来自其他人,但我不确定是谁。可能this article。我敢肯定,存在更好的做法,但是我发现它可以工作,并且context.py是将常量保持在中心位置的好地方。只需导入它们而不是下划线