【问题标题】:__init__.py not working as expected in Python 3 [duplicate]__init__.py 在 Python 3 中无法按预期工作 [重复]
【发布时间】:2017-01-24 14:49:01
【问题描述】:

我有以下模块结构:

/home/Dir1/Dir2/Mod.py

在 /home 中,我有正在执行的脚本 Test.py,并具有以下代码:

import Dir1.Dir2 
dummy()

再次查看目录:Dir1 有一个 __init__.py 文件,其中包含以下代码:

print('dir1 init')
x = 1

目录Dir2 具有以下__init__.py 文件,其代码如下:

from Mod import dummy
print('dir2 init')
y = 2

有一个最终文件Mod.py,定义如下:

print ("in Mod.py")
z = 3
def dummy():
    print ("Hello World")

由于Test.py 是我的应用程序的入口点,因此我得到以下错误:

dir1 init
Traceback (most recent call last):
  File "Test.py", line 1, in <module>
    import Dir1.Dir2
  File "C:\Users\bhatsubh\Desktop\Everything\Codes\Python\Dir1\Dir2\__init__.py"
, line 1, in <module>
    from Mod import dummy
ImportError: No module named 'Mod'

为什么Dir2里面的__init__.py文件找不到Mod.py里面的文件?

基本上,我在这里尝试做的是将Mod.py 中的函数虚拟化,而用户不知道有该名称的模块。

我在这里做了什么傻事吗?

【问题讨论】:

    标签: python python-3.x import


    【解决方案1】:

    将您的 Test.py 更改为使用带有完全限定名称的 dummy

    import Dir1.Dir2
    
    Dir1.Dir2.dummy()
    

    和您的Dir1/Dir2/.__init__.py 使用相对导入,在Mod 前面带有前导.

    from .Mod import dummy
    print('dir2 init')
    y = 2
    

    让它工作:

    python Test.py 
    dir1 init
    in Mod.py
    dir2 init
    Hello World
    

    注意:按照惯例,所有包(即目录)和模块(即py 文件)名称都应为小写。

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2020-04-23
      • 2013-07-27
      • 1970-01-01
      相关资源
      最近更新 更多